使用Canny算子進行邊緣檢測,並分開輸出到三個窗口中,再給每一個窗口添加文字
代碼
#include"cv.h"
#include"highgui.h"
//讀入視頻並轉換爲灰度圖再作邊緣檢測
//並分開三個窗口輸出
IplImage *frame,*gray,*canny,*uni,*temp;
int wid=-1, hei=-1;
int main(void)
{
CvCapture *src = cvCreateFileCapture("Megamind.avi");
//cvNamedWindow("Union");
cvNamedWindow("Origin");
cvNamedWindow("Gray");
cvNamedWindow("Canny");
CvFont r, g, c;
cvInitFont(&r, CV_FONT_HERSHEY_TRIPLEX, 1, 1, 0);
cvInitFont(&g, CV_FONT_HERSHEY_TRIPLEX, 1, 1, 0);
cvInitFont(&c, CV_FONT_HERSHEY_TRIPLEX, 1, 1, 0);
while (1)
{
frame = cvQueryFrame(src);
if (!frame)
break;
/*if (wid == -1)
{
wid = frame->width;
hei = frame->height;
}*/
if (cvWaitKey(33) == 27)
break;
temp = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);
cvCopy(frame, temp);
cvPutText(temp, "Original", CvPoint(10, 30), &r, CV_RGB(0, 204, 153));//顯示文字
cvShowImage("Origin", temp);
gray = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);//先創建圖像指針
cvConvertImage(frame, gray);
canny = cvCreateImage(cvGetSize(gray), IPL_DEPTH_8U, 1);//同上先創建
cvPutText(gray, "Gray", CvPoint(10, 30), &g, CV_RGB(0, 204, 153));//顯示文字
cvShowImage("Gray", gray);//顯示到灰度窗口中
cvCanny(gray, canny, 20, 250, 3);//邊緣檢測處理
cvPutText(canny, "Canny", CvPoint(10, 30), &c, CV_RGB(0, 204, 153));
cvShowImage("Canny", canny);//顯示到邊緣檢測窗口中
/*uni = cvCreateImage(CvSize(3 * frame->width, frame->width), IPL_DEPTH_8U,3);
CvRect pos1 = CvRect(0, 0, wid, hei);
CvRect pos2 = CvRect(wid, 0, wid, hei);
CvRect pos3 = CvRect(2*wid, 0 ,wid, hei);
cvSetImageROI(uni, pos1);
cvCopy(frame, uni);
cvResetImageROI(uni);
cvSetImageROI(uni, pos2);
uni->nChannels = 1;
cvCopy(gray, uni);
cvResetImageROI(uni);
cvSetImageROI(uni, pos3);
uni->nChannels = 1;
cvCopy(canny, uni);
cvResetImageROI(uni);
cvShowImage("Union", uni);*/
}
cvDestroyAllWindows();
cvReleaseCapture(&src);
cvReleaseImage(&gray);
cvReleaseImage(&canny);
return 0;
}