gpt4 book ai didi

c++ - Insufficient memory 错误 Opencv/c++

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:30 29 4
gpt4 key购买 nike

当我运行这段代码时,它给出“内存不足错误”

#include "stdafx.h"
#include "PixelProcess.h"
#include "ContourProcess.h"

using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{

int width = 480, height = 640, N = 3000, framesToLearn = 500, i, w, h, carCounter, PixelCounter, R, G, B, MyResult, c;
float circularity;
String fileName;
IplImage* image;
Mat Output = Mat::zeros(width, height,CV_8UC1);
Mat Draw = Mat::zeros(width, height,CV_8UC3);
vector<vector<Point> > contours;
vector<Point> hull;
vector<Point> keys;
vector<Vec4i> hierarchy;
vector<Point> polygonRegion;
Point centroid;
GaussianMex *F = new GaussianMex[480*640];

int Y[5] = {35,35,360,360,35};
int X[5] = {223,340,590,1,223};

clock_t begin = 0,end = 0;

for(i = 1; i <= N ; i++){
if (i>framesToLearn){begin = clock();}
carCounter = 0;
PixelCounter = 0;
fileName = intToStr(i,"D:/Datasets/Elda2ry1/(");
image = cvLoadImage(fileName.c_str(),CV_LOAD_IMAGE_COLOR);
// Update the pixel gaussian model
for(w = 0; w < width ; w++)
for(h = 0; h < height ; h++)
{
R = uchar((image->imageData+w*image->widthStep)[h*image->nChannels+0]);
G = uchar((image->imageData+w*image->widthStep)[h*image->nChannels+1]);
B = uchar((image->imageData+w*image->widthStep)[h*image->nChannels+2]);
MyResult = F[PixelCounter].Process(R,G,B);
Output.row(w).col(h) = MyResult*255;
PixelCounter ++;
}
if(i>framesToLearn){ //Extract Cars
//Output dilation
dilate(Output,Output,Mat());
//Matrix to draw on
cvtColor(Output,Draw,CV_GRAY2RGB);
polygonRegion = DrawRegionOfInterest(Draw,X,Y,5);
findContours(Output,contours,hierarchy,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE,Point (0,0));

for(c = 0; c< contours.size(); c++ )//for each contour
{
//get convex hull and it's centroid
convexHull(contours[c],hull,false);
centroid = GetCentroidOfConvexHull(hull);
//check if the centroid is within the region of interest
if (pointPolygonTest(polygonRegion,centroid,false) >=0 )
// Check area and Solidity of the convex hull
if( contourArea(hull) > 800 && contourArea(contours[c])/contourArea(hull) > 0.7)
{
circularity = GetCircularity(hull,contourArea(hull),centroid);
// Check circularity wrt the hull position
if((centroid.y < width/3 && circularity <= 0.42)||(centroid.y > width/3 && (circularity >= 0.33) && (circularity <= 0.4)))
{

// Crop the car and save it
fileName = "D:\\Dataset\\F" + itos(i) + "C" + itos(carCounter) + ".jpg";
Rect myRect = cropMyImage(hull,image,fileName);
}
}
}
}
clrscr();
}
}

我在这里找到:OpenCV Error: Insufficient memory

findcontours 函数可能导致此错误,但在我的例子中,我在代码开头声明了 vector> contours

最佳答案

错误是“内存不足”,因为你没有足够的内存...你有内存泄漏。您正在从磁盘读取图像,但您永远不会释放它们使用的内存。

而且您一开始就不应该使用 IplImage。这是旧格式,已被 Mat 取代(您也使用过)。这种情况不会发生在 Mat 上,因为它是一个智能指针,会释放自己的内存。

关于c++ - Insufficient memory 错误 Opencv/c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310374/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com