OpenCV 2.1: Runtime error

后端 未结 2 1570
感情败类
感情败类 2020-12-04 01:02

I have a program which uses OpenCV. I have a webcam and it captures color frames and I want to convert the color frames to gray-scale frames. So, I used the cvCvtColor

相关标签:
2条回答
  • 2020-12-04 01:34

    I see a lot of people trying to do this simple task and having trouble with it.

    So I took the liberty of changing your source code into a program that would display on the screen the grayscale converted video from the webcam.

    Please use this code for reference.

    I compiled on my Macbook Pro with:

    g++  -I/usr/include/opencv  -c gray.cpp -o gray.o -m32 -arch i386
    g++  gray.o -o gray -L/usr/lib -lcxcore -lcv -lhighgui -lcvaux -lml -ldl -m32 -arch i386
    

    File: gray.cpp

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/time.h>
    
    #include"cv.h"
    #include"highgui.h"
    #include"cxtypes.h"
    
    
    #define ERROR -1
    #define NO_ERROR 1
    
    
    int main()
    {
        int camera_index = 0;
        IplImage *color_frame = NULL;
        int exit_key_press = 0;
    
        CvCapture *capture = NULL;
        capture = cvCaptureFromCAM(camera_index);
        if (!capture)
        {
            printf("!!! ERROR: cvCaptureFromCAM\n");
            return -1;
        }
    
        cvNamedWindow("Grayscale video", CV_WINDOW_AUTOSIZE);
    
        while (exit_key_press != 'q')
        {
            /* Capture a frame */
            color_frame = cvQueryFrame(capture);
            if (color_frame == NULL)
            {
                printf("!!! ERROR: cvQueryFrame\n");
                break;
            }
            else
            {
                IplImage* gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height), color_frame->depth, 1);  
                if (gray_frame == NULL)
                {
                    printf("!!! ERROR: cvCreateImage\n");
                    continue;
                }
    
                cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY);
                cvShowImage("Grayscale video", gray_frame);
                cvReleaseImage(&gray_frame);
            }
                exit_key_press = cvWaitKey(1);
        }
    
        cvDestroyWindow("Grayscale video");
        cvReleaseCapture(&capture);
    
        return 0;
    }
    
    0 讨论(0)
  • 2020-12-04 01:54

    Don't you have to allocate your IplImage? It is not specified by the conversion function but I believe you have to allocate a dst the same size/type as the source.

    0 讨论(0)
提交回复
热议问题