OpenCV學習筆記——視頻的邊緣檢測

使用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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章