OpenCV Error: Insufficient memory
来源:互联网 发布:linux入门教程下载 编辑:程序博客网 时间:2024/06/06 00:48
在使用OpenCV从视频预处理人脸训练数据时,在正常运行一段时间后,程序报错 。
上述错误是典型的内存溢出错误,肯定是程序中存在使用后的指针没有释放,检查后发现使用是使用的IplImage* srcCopy参数在函数结束(或者已经不用了)的地方没有释放,只需要在相应的位置使用cvReleaseImage(&srcCopy)释放掉就可以。其他情况可类似排查,实例代码如下:
// 截取人脸,并保存void CropFaceAndSave(const Mat& imgInput, bool isRight, const string& filename){ IplImage* src = &IplImage(imgInput); IplImage* srcCopy; int ratio = 3; // imgorl/imgdeal = 3 将图像缩小3倍处理 if (isRight) { srcCopy = cvCreateImage(cvSize(src->height, src->width), src->depth, src->nChannels); cvTranspose(src, srcCopy); cvFlip(srcCopy, NULL, 0); } else{ srcCopy = cvCreateImage(cvSize(src->width, src->height), src->depth, src->nChannels); cvCopy(src, srcCopy, 0); } Mat imgOriginal(srcCopy), imgResult; resize(imgOriginal, imgResult, Size(srcCopy->width / ratio, srcCopy->height / ratio)); // 对imgcopy检测人脸 Mat face_gray; cvtColor(imgResult, face_gray, CV_BGR2GRAY); //rgb类型转换为灰度类型 equalizeHist(face_gray, face_gray); //直方图均衡化 face_cascade.detectMultiScale(face_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30)); for (int i = 0; i < faces.size(); i++){ // 起始点 Point pointStart(faces[i].x, faces[i].y); Point pointEnd(faces[i].x + faces[i].width, faces[i].y + faces[i].height); Point center(int(faces[i].x + faces[i].width*0.5), int(faces[i].y + faces[i].height*0.5)); rectangle(imgResult, pointStart, pointEnd, Scalar(255, 0, 0), 2, 8, 0); // 阈值选取,滤除小的干扰 if (ratio*faces[i].width < srcCopy->width / 3){ //cout << "滤除 x = " << ratio*faces[i].x << ", y = " << ratio*faces[i].y << endl; continue; } // 计算原图上的截取区域,并截取 Point centerInOrignal(ratio*center.x, ratio*center.y); // cout << "x = " << centerInOrignal.x << ", y = " << centerInOrignal.y << endl; // 可以剪裁 if (centerInOrignal.y >= 360){ if (centerInOrignal.y > 720){ centerInOrignal.y = 720; } // 新建ROI大小的图片 cvSetImageROI(srcCopy, cvRect(0, centerInOrignal.y - 360, srcCopy->width, srcCopy->width)); IplImage* imgCrop = cvCreateImage(cvSize(srcCopy->width, srcCopy->width), srcCopy->depth, srcCopy->nChannels); cvCopy(srcCopy, imgCrop, 0); cvResetImageROI(srcCopy); Mat imgCropResult(imgCrop); imshow("Crop ROI", imgCropResult); stringstream ss; string indexStr; ss << saveIndex; ss >> indexStr; imwrite(filename + "\\real" + indexStr + ".png", imgCropResult); cvReleaseImage(&imgCrop); // 不用的指针一定要释放掉,不然内存会泄露 saveIndex++; } } imshow("检测人脸", imgResult); // 注意,这个指针不用释放,他不是我们新建出来的,只是指向了现有内存空间,而那块空间在栈中,系统会自动释放 //cvReleaseImage(&src); // 只需要释放我们申请的内存 cvReleaseImage(&srcCopy);}
阅读全文
0 0
- OpenCV Error: Insufficient memory
- OpenCV Error: Insufficient memory
- Opencv Error Insufficient memory错误解决方案
- #debug日志#解决opencv Error: Insufficient memory 问题
- OpenCV Error:Insufficient memory(Failed to allocate 1244164 bytes)
- OpenCV ERROR: Insufficient memory问题和imread(img_path)读取图片失败问题
- OpenCV Error: Insufficient memory (Failed to allocate 47752340 bytes) in cv::OutOfMemoryError, file
- 【一点点心得】处理 opencv insufficient memory
- “OpenCV ERROR: Insufficient memory”解决方法(如:用随机森林来进行预测样本过大时报错解决方法)
- OpenCV (insufficient memory in function cvAlloc)的解决办法
- opencv Insufficient memory (Failed to allocate 1520000 bytes)解决办法
- opencv_traincascade训练haar时Error: Insufficient memory等问题
- ERROR: insufficient memory reserved for statement tuplesort_mk.h:115
- windml Insufficient memory
- bios升级提示Insufficient memory如何是好
- 问题分享:Greenplum Compression failed: insufficient memory
- Insufficient space for shared memory file
- error: insufficient permissions for device
- C++内存管理
- 干货:产品经理怎么寻找软件开发项目
- 多态 2 polymorphism
- 关于./configure 出错的问题解决
- bzoj2243染色
- OpenCV Error: Insufficient memory
- 逆元概念与模板
- Day03jQuery事件绑定
- Error:Execution failed for task ':app:mergeDebugResources'. > Error: Some file crunching failed, see
- JAVA字符串操作
- 【dfs(深搜)模板】
- (十二)服务雪崩-熔断器
- keil ucosiii工程改为 iar工程
- 方法的调用以及用过super.的方式来调用。三种