[英]How to fix the insufficient memory error (openCV)
請幫助如何處理這個問題:
OpenCV 錯誤:未知函數中的內存不足(無法分配 921604 字節),文件 ........\\ocv\\opencv\\modules\\core\\src\\alloc.cpp,第 52 行
我使用cv::clone
和pointer
代碼是:
每100ms有一個定時器; 在定時器事件中,我調用這個方法:
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),從而引發Insufficient Memory錯誤。
似乎您需要重新設計當前的方法,以便它占用更少的 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()
NB我知道這不是解決問題的最佳解決方案,但是對我來說已經足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.