Сохранить IplImage (OpenCV) на вектор в C ++ - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь сохранить некоторые кадры веб-камеры в OpenCV:

CvCapture* capture = cvCaptureFromCAM(0);
IplImage *img = new IplImage(); 
vector<IplImage *> imgs;

while (true){
    cvGrabFrame(capture));
    img=cvRetrieveFrame(capture);
    imgs.push_back(img);
}

, а затем прочитать из вектора:

cvNamedWindow("Caption",CV_WINDOW_AUTOSIZE);

for(int i=0 ; i < imgs.size() ; i++){
    IplImage *img_col = new IplImage();
    img_col=imgs[i];
    cvShowImage("Caption" , img_col);
}

Но повторить эту ошибку:

OpenCV Error: Null pointer (The image has NULL data pointer) in cvGetMat

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Просто измените:

vector<IplImage> imgs;
...
img=cvRetrieveFrame(capture);
textmgs.push_back(img); // A copy of the full matrix will be executed

Но, как сказал Мартин, вы должны изучить C ++, прежде чем изучать OpenCV, а лучше - изучать Python. и забудь про C ++:)

1 голос
/ 05 апреля 2011

Я думаю, вам нужно узнать, как работает память в C ++

В первом бите кода вы выделяете только один указатель изображения, а затем извлекаете все свои изображения и сохраняете копии одного и того же значения.

Во второй части вы выделяете новое изображение для каждого указателя, а затем перезаписываете эту память значением в массиве

Вы также должны прочитать о том, как openCV управляет памятью, он сделает это за вас автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...