c - 开发 C++ 与 OpenCV 崩溃

标签 c opencv windows-xp dev-c++

我正在编写一个简单的算法来将 RGB 图像从我的网络摄像头转换为 HSV,它编译正常,但在执行 .exe 时崩溃。

#include <cv.h>
#include <highgui.h>

int main(int argc, char** argv)
    {
     // Cria uma janela.
    cvNamedWindow("imagem", CV_WINDOW_AUTOSIZE);
    // Cria a conexão com a webcam.
    CvCapture *capture = cvCreateCameraCapture(0);
    // Variável que armazena o frame.
    IplImage *frame;
    IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
    while(1)
        {
        // Variável  recebe o frame.
        frame = cvQueryFrame(capture);
        if(!frame) break;
        cvCvtColor(frame, imghsv, CV_BGR2HSV);
        // Exibe o frame na janela.
        cvShowImage("imagem", frame);
        cvShowImage("hsv", imghsv);
        // Encerra o loop com uma tecla.
        if( cvWaitKey(100) == 27 ) break;
    }
    // Libera a memória utiliazada.
    cvReleaseImage(&frame);
    cvReleaseImage(&imghsv);
    cvReleaseCapture(&capture);
    // Fecha a janela.
    cvDestroyWindow("imagem");
    cvDestroyWindow("hsv");
}

没有行“IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);” .exe 有效,但算法只显示我的图像。

我在 Windows XP SP3 中使用 Dev C++ 4.9.9.2 和 OpenCV 2.1。 对不起英语。 谢谢

IplImage *frame; 替换为 IplImage *frame=cvQueryFrame(capture); 即可解决问题。

最佳答案

IplImage *frame;
IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);

您的 frame 图像尚未分配,您不应该在实际抓取帧之前创建 hsv 图像。

另请注意:

cvReleaseImage(&frame);

您不应该发布从 cvQueryFrame() 抓取的图像,OpenCV 会处理它。

来自 OpenCV 文档:

The function cvQueryFrame grabs a frame from a camera or video file, decompresses it and returns it. This function is just a combination of GrabFrame and RetrieveFrame , but in one call. The returned image should not be released or modified by the user. In the event of an error, the return value may be NULL.

CvCapture *capture = cvCreateCameraCapture(0);

您还应该检查 cvCreateCameraCapture 的返回值,它可能是 NULL

IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);

您应该使用 IPL_DEPTH_8U 而不是 8

关于c - 开发 C++ 与 OpenCV 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16567341/

相关文章:

OpenCV:突然光线变化下的背景减法

c++ - c++ 中的 WinXP 控制台光标控制字符是什么?

batch-file - 如何在windows xp中使用批处理文件检查端口80是否可用

C语言: Search text file for a "var" and store the next string as the value

c - 访问和修改 R 中 .C() 调用的包函数

c - 在 realloc 中使用结构值会导致段错误

c# - 人群视频实时物体识别和碰撞检测库或工具推荐

python - 如何使用 opencv 计算 2 个 numpy 数组的 "EMD",即 "histogram"?

c++ - 如何正确调试并查找崩溃原因?

c - 当我没有从返回 double 的函数返回值时,为什么我会得到 1.#QNB