• 《学习OpenCV》练习题第四章第一题b&c


     1 #include <highgui.h>
     2 #include <cv.h>
     3 
     4 #pragma comment (lib,"opencv_calib3d231d.lib")
     5 #pragma comment (lib,"opencv_contrib231d.lib")
     6 #pragma comment (lib,"opencv_core231d.lib")
     7 #pragma comment (lib,"opencv_features2d231d.lib")
     8 #pragma comment (lib,"opencv_flann231d.lib")
     9 #pragma comment (lib,"opencv_gpu231d.lib")
    10 #pragma comment (lib,"opencv_haartraining_engined.lib")
    11 #pragma comment (lib,"opencv_highgui231d.lib")
    12 #pragma comment (lib,"opencv_imgproc231d.lib")
    13 #pragma comment (lib,"opencv_legacy231d.lib")
    14 #pragma comment (lib,"opencv_ml231d.lib")
    15 #pragma comment (lib,"opencv_objdetect231d.lib")
    16 #pragma comment (lib,"opencv_ts231d.lib")
    17 #pragma comment (lib,"opencv_video231d.lib")
    18 
    19 /*
    20  *《学习OpenCV》第四章第一题b部分
    21  * 完成时间:19:24 3/10 星期日 2013
    22  */
    23 
    24 int main()
    25 {
    26     char * file_path = "H:/TDDOWNLOAD/Video/1111.avi";
    27     CvCapture * capture = 0;
    28     capture = cvCreateFileCapture(file_path);
    29 
    30     // 载入视频文件失败
    31     if(capture == NULL)
    32     {
    33         printf("Can't load the video file, quit...
    ");
    34         return 0;
    35     }
    36     
    37     // 每一帧
    38     IplImage * frame = cvQueryFrame(capture);;
    39     // 灰度后的每一帧
    40     IplImage * gray_frame = cvCreateImage( cvGetSize(frame), frame->depth, 1);
    41     IplImage * gray_frame_3 = cvCreateImage(cvGetSize(frame), frame->depth, 3);
    42     // 边缘检测后的每一帧
    43     IplImage * canny_frame = cvCreateImage( cvGetSize(frame), frame->depth, 1);
    44     IplImage * canny_frame_3 = cvCreateImage(cvGetSize(frame), frame->depth, 3);
    45     // 聚合来的每一帧
    46     IplImage * total_frame = cvCreateImage( cvSize(frame->width * 3, frame->height),
    47         frame->depth, frame->nChannels);
    48 
    49     while(1)
    50     {
    51         // 从视频文件读入数据
    52         frame = cvQueryFrame(capture);
    53         if(!frame)
    54             break;
    55 
    56         // 将读入数据转换为灰度图
    57         cvCvtColor( frame, gray_frame, CV_RGB2GRAY );
    58         cvCvtColor( gray_frame, gray_frame_3, CV_GRAY2BGR );
    59         
    60         // 对图像做Canny边缘检测
    61         cvCanny( gray_frame, canny_frame, 30, 100, 3);
    62         cvCvtColor( canny_frame, canny_frame_3, CV_GRAY2BGR );
    63 
    64         // 将三幅图像分别复制到新的图像中
    65         cvSetImageROI( total_frame, cvRect(0, 0, frame->width, frame->height));
    66         cvCopy( frame, total_frame, 0);
    67         cvResetImageROI(total_frame);
    68                 
    69         cvSetImageROI( total_frame, cvRect(frame->width, 0, gray_frame->width, gray_frame->height));
    70         cvCopy( gray_frame_3, total_frame, 0);
    71         cvResetImageROI(total_frame);
    72                 
    73         cvSetImageROI( total_frame, cvRect(frame->width*2, 0, canny_frame->width, canny_frame->height));
    74         cvCopy( canny_frame_3, total_frame, 0);
    75         cvResetImageROI(total_frame);
    76 
    77         // 在图像的三个不同的部分写上合适的文字标签
    78         CvFont textFont = cvFont( 10, 1);
    79         cvInitFont( &textFont, CV_FONT_HERSHEY_SIMPLEX, 0.5f, 0.5f, 0, 1 );
    80 
    81         cvPutText( total_frame, "Frame", cvPoint( 10, 20 ), &textFont, cvScalar( 0, 0, 255 ) );
    82         cvPutText( total_frame, "Frame_Gray", cvPoint( frame->width + 10, 20 ), &textFont, cvScalar( 0, 0, 255 ) );
    83         cvPutText( total_frame, "Frame_Canny", cvPoint( frame->width * 2 + 10, 20 ), &textFont, cvScalar( 0, 0, 255 ) );
    84 
    85 
    86 
    87         // 显示图像
    88         cvShowImage("total", total_frame);
    89     
    90         char c = cvWaitKey(33);
    91         if(c == 27)
    92             break;
    93     }
    94     cvReleaseImage( & gray_frame );
    95     cvReleaseCapture(&capture);
    96     cvDestroyAllWindows();
    97 
    98     return 0; 
    99 }

    运行结果:

  • 相关阅读:
    聪明人 & 普通人
    13种模型及方法论
    面向大规模商业系统的数据库设计和实践
    分治算法
    软件架构
    隐含前提思维模型
    Git回滚代码到某个commit
    使用arthas排查 test 问题
    Arthas
    docker 操作入门
  • 原文地址:https://www.cnblogs.com/qdsclove/p/3351181.html
Copyright © 2020-2023  润新知