1

ビルドした後、メモリ不足エラーが発生しました。resultImage!= NULLの場合、これ以上画像を作成しないようにしましたが、それでもこの問題が発生します。

私は多くの検索を行いましたが、この問題を解決する方法を見つけることができませんでした。誰かがこの問題で私を助けることができますか?その非常に単純なコードは、ウェブカメラからフレームをキャプチャして色を変換するだけです。私はVB2010 C ++ExpressEditionとopencv2.4を使用しています。

ええと、私はopencvと言語cも初めてです。可能であれば、間違ったコードを修正してください。

#include "stdafx.h"

int main(){
    CvCapture* capture = cvCaptureFromCAM(0);
    if(!capture) return -1;

    char key;

    cvNamedWindow("Frame");

    IplImage* frameImage = NULL;
    IplImage* resultImage = NULL;
    IplImage* HSVImage = NULL;

    while(1){
        frameImage = cvQueryFrame(capture);
        if(!frameImage) break;

        if(resultImage == NULL){
            resultImage = cvCreateImage(cvGetSize(frameImage),IPL_DEPTH_8U,3);
            HSVImage = cvCreateImage(cvGetSize(frameImage),IPL_DEPTH_8U,3);
        }
        resultImage = cvCloneImage(frameImage);

        cvCvtColor(resultImage,HSVImage,CV_RGB2HSV);

        cvShowImage("Frame",HSVImage);

        key = cvWaitKey(20);
        if(key == 27) break;
    }

    cvReleaseCapture(&capture);
    cvReleaseImage(&resultImage);
    cvReleaseImage(&HSVImage);
    cvDestroyAllWindows();
    return 0;
}
4

1 に答える 1

1

ほとんどの場合、cvCloneImage()解放されなかったメモリを割り当てます。これを使用してみてください:

IplImage* HSVImage = cvCreateImage(cvGetSize(frameImage),IPL_DEPTH_8U,3);

while(1){
    IplImage* frameImage = cvQueryFrame(capture);
    if(!frameImage) break;

    cvCvtColor(frameImage,HSVImage,CV_RGB2HSV);

    cvShowImage("Frame",HSVImage);

    cvReleaseImage(frameImage);

    key = cvWaitKey(20);
    if(key == 27) break;
}
于 2012-11-05T06:58:46.153 に答える