【練習4.1】映像轉換、Canny檢測、映像合并、在映像上輸出文字

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   os   

2014-07-17

第四章 細說HighGUI

練習題第1題

題目大致要求:

a:(1)從視頻檔案讀入資料,(2)轉換為灰階圖,(3)做Canny邊緣檢測,顯示在三個視窗

b:將a的三個視頻顯示在一個視窗中

c:在b步驟的不同部分寫上合適的文字標籤

代碼:

  1 #include "stdafx.h"  2 #include <windows.system.h>  3 #include <iostream>  4 #include <cv.h>  5 #include <highgui.h>  6 using namespace std;  7 using namespace cv;  8   9 int _tmain(int argc, _TCHAR* argv[]) 10 { 11     const char * videoFileName = "D:\\Work\\Work_Programming\\Source\\Video\\Fork.avi"; 12  13     cvNamedWindow("原始視頻", 0); 14     cvNamedWindow("灰階視頻", 0); 15     cvNamedWindow("Canny視頻", 0); 16     cvNamedWindow("三合一視頻", 0); 17  18     CvCapture * videoCapture = cvCreateFileCapture(videoFileName); 19     int imgWidth = (int)cvGetCaptureProperty(videoCapture, CV_CAP_PROP_FRAME_WIDTH); 20     int imgHeight = (int)cvGetCaptureProperty(videoCapture, CV_CAP_PROP_FRAME_HEIGHT); 21     IplImage * frame; 22  23     IplImage * grayImage = cvCreateImage(cvSize(imgWidth, imgHeight), IPL_DEPTH_8U, 1); 24     IplImage * cannyImage = cvCreateImage(cvSize(imgWidth, imgHeight), IPL_DEPTH_8U, 1); 25     IplImage * tripleImage = cvCreateImage(cvSize(imgWidth * 3, imgHeight), IPL_DEPTH_8U, 3); 26     IplImage *tempImage = cvCreateImage(cvSize(imgWidth, imgHeight), IPL_DEPTH_8U, 3); 27  28     IplImage *subFrameImage = cvCreateImageHeader(cvSize(imgWidth, imgHeight), IPL_DEPTH_8U, 3); 29     IplImage *subGrayImage = cvCreateImageHeader(cvSize(imgWidth, imgHeight), IPL_DEPTH_8U, 3); 30     IplImage *subCannyImage = cvCreateImageHeader(cvSize(imgWidth, imgHeight), IPL_DEPTH_8U, 3); 31  32     //--------------------c在圖片上顯示文字-----------------------     33     CvFont ft; 34     cvInitFont(&ft, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 2, 8); 35  36     while (true) 37     { 38         frame = cvQueryFrame(videoCapture); 39  40         if (!frame) 41         { 42             break; 43         } 44  45         //--------------------a(1)小題-----------------------          46         cvShowImage("原始視頻", frame); 47  48         //--------------------a(2)小題-----------------------     49         cvCvtColor(frame, grayImage, CV_BGR2GRAY); 50         cvShowImage("灰階視頻", grayImage); 51  52         //--------------------a(3)小題----------------------- 53         if (grayImage->nChannels != 1) 54         { 55             return 0; 56         } 57  58         cvCanny(grayImage, cannyImage, 50, 100, 3); 59         cvShowImage("Canny視頻", cannyImage); 60  61         //--------------------b:將三個視頻在一個視窗中顯式----------------------- 62         //將原始映像複製到三合一視窗 63         subFrameImage->origin = tripleImage->origin; 64         subFrameImage->widthStep = tripleImage->widthStep; 65         subFrameImage->imageData = tripleImage->imageData; 66  67         cvPutText(frame, "Original", cvPoint(0, 20), &ft, cvScalar(255, 255, 255)); 68  69         cvCopy(frame, subFrameImage); 70  71         //將灰階圖複製到三合一視窗 72         subGrayImage->origin = tripleImage->origin; 73         subGrayImage->widthStep = tripleImage->widthStep; 74         subGrayImage->imageData = tripleImage->imageData + (subFrameImage->width)*subFrameImage->nChannels; 75         cvCvtColor(grayImage, tempImage, CV_GRAY2BGR); 76  77         cvPutText(tempImage, "Gray", cvPoint(0, 20), &ft, cvScalar(255, 255, 255)); 78  79         cvCopy(tempImage, subGrayImage); 80  81         //將Canny複製到三合一視窗 82         subCannyImage->origin = tripleImage->origin; 83         subCannyImage->widthStep = tripleImage->widthStep; 84         subCannyImage->imageData = tripleImage->imageData + (subFrameImage->width * 2)*subFrameImage->nChannels; 85         cvCvtColor(cannyImage, tempImage, CV_GRAY2BGR); 86  87         cvPutText(tempImage, "Canny", cvPoint(0, 20), &ft, cvScalar(255, 255, 255)); 88  89         cvCopy(tempImage, subCannyImage); 90  91         cvShowImage("三合一視頻", tripleImage); 92  93         char c = cvWaitKey(33); 94         if (c == 27) 95         { 96             break; 97         } 98     } 99 100     cvReleaseImage(&grayImage);101     cvReleaseImage(&cannyImage);102     cvReleaseImage(&tripleImage);103     cvReleaseImage(&tempImage);104 105     cvReleaseImageHeader(&subFrameImage);106     cvReleaseImageHeader(&subGrayImage);107     cvReleaseImageHeader(&subCannyImage);108     cvReleaseCapture(&videoCapture);109     cvDestroyWindow("原始視頻");110     cvDestroyWindow("灰階視頻");111     cvDestroyWindow("Canny視頻");112     cvDestroyWindow("三合一視頻");113 114     //system("pause");115 116     return 0;117 }

 

結果映像:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.