《学习OpenCV》第四章课后题1-a

来源:互联网 发布:淘宝退款骗局 编辑:程序博客网 时间:2024/05/17 20:29

题目说明:
a创建一个程序实现以下功能:(1)从视频文件中读入数据;(2)将读入数据转换为灰度图;(3)对图像做Canny边缘检测。将三个过程的处理结果显示到不同的窗口中,每个窗口根据其内容合理命名。

#include <highgui.h>#include <cv.h>int main(){    char * file_path = "E:/song.mp4";    CvCapture * capture = 0;    capture = cvCreateFileCapture(file_path);    // 载入视频文件失败    if(capture == NULL)    {        printf("Can't load the video file, quit...\n");        return 0;    }            // 每一帧        static IplImage * frame;           // 灰度后的每一帧        static IplImage * gray_frame;          // 边缘检测后的每一帧        static IplImage * canny_frame;         //创建三个窗口        cvNamedWindow("color",CV_WINDOW_AUTOSIZE);        cvNamedWindow("gray",CV_WINDOW_AUTOSIZE);        cvNamedWindow("canny",CV_WINDOW_AUTOSIZE);        // 从视频文件读入数据        frame = cvQueryFrame(capture);        // 为gray_frame 和 canny_frame 分配合适的尺寸        gray_frame = cvCreateImage( cvGetSize(frame), frame->depth, 1);        canny_frame = cvCreateImage( cvGetSize(frame), frame->depth, 1);    while(1)    {        frame = cvQueryFrame(capture);        if(!frame)            break;        // 将读入数据转换为灰度图        cvCvtColor( frame, gray_frame, CV_RGB2GRAY );        // 对图像做Canny边缘检测        cvCanny( gray_frame, canny_frame, 30, 100, 3);        // 显示图像        cvShowImage("color", frame);        cvShowImage("gray", gray_frame);        cvShowImage("canny", canny_frame);        char c = cvWaitKey(4);        if(c == 27)            break;    }    cvReleaseCapture(&capture);    //释放图像数据    cvReleaseImage(&frame);    cvReleaseImage(&gray_frame);    cvReleaseImage(&canny_frame);    //释放窗口数据    cvDestroyAllWindows();    return 0;}

注意:不要把gray_frame = cvCreateImage( cvGetSize(frame), frame->depth, 1);和canny_frame = cvCreateImage( cvGetSize(frame), frame->depth, 1);放到while循环中去,这样会在内存中不断申请空间,最后导致内存泄露而停止程序。

引用:qdsclove的专栏
http://blog.csdn.net/stk_overflow/article/details/8760035

0 0
原创粉丝点击