请帮助解决此问题:
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;
}
答案 0 :(得分:3)
clone()
的{{1}}方法执行数据的硬拷贝。所以问题在于每个cv::Mat
分配一个新映像,并且在数百次调用此方法之后,您的应用程序将占用数百MB(如果不是GB),从而抛出内存不足强>错误。
您似乎需要重新设计当前的方法,以便占用更少的RAM内存。
答案 1 :(得分:0)
我以前遇到过这个错误,我通过在阅读图像时减小图像尺寸并减小分辨率来解决它。
在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()
我知道这不是解决问题的最佳方法,但是对我来说就足够了。