请帮助如何处理此问题:
OpenCV错误:中内存不足(无法分配921604字节)未知函数,文件..\ocv\opencv\modules\core\src\alloc.cpp,第52行
使用cv::clone
和pointer
的方法之一
代码为:
每100毫秒有一个定时器;在计时器事件中,我调用此方法:
void DialogApplication::filterhijau(const Mat &image, Mat &result) {
cv::Mat resultfilter = image.clone();
int nlhijau = image.rows;
int nchijau = image.cols*image.channels();;
for(int j=0; j<nlhijau; j++) {
uchar *data2=resultfilter.ptr<uchar> (j); //alamat setiap line pada result
for(int i=0; i<nchijau; i++) {
*data2++ = 0; //element B
*data2++ = 255; //element G
*data2++ = 0; //element R
}
// free(data2); //I add this line but the program hung up
}
cv::addWeighted(resultfilter,0.3,image,0.5,0,resultfilter);
result=resultfilter;
}
cv::Mat
的clone()
方法执行数据的硬拷贝。因此,问题是为每个filterhijau()
分配一个新的映像,在对该方法进行数百次调用后,您的应用程序将占用数百MB(如果不是GB的话),从而引发内存不足错误。
看起来你需要重新设计你目前的方法,这样它占用的RAM内存就更少了。
我以前遇到过这个错误,我通过在读取图像的同时缩小图像大小来解决它,并牺牲了一些分辨率。
在Python中是这样的:
# Open the Video
cap = cv2.VideoCapture(videoName + '.mp4')
i = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame = cv2.resize(frame, (900, 900))
# append the frames to the list
images.append(frame)
i += 1
cap.release()
N。B.我知道这不是这个问题的最佳解决方案,但对我来说已经足够了