《學習OpenCV》練習5-4

#include "cv.h"
#include "highgui.h"
#include "stdio.h"

//*****************************************************
//主函數
//*****************************************************
int main()
{
	/*載入源圖像*/
	IplImage* src1 = cvLoadImage( "homework_1.jpg" );
	IplImage* src2 = cvLoadImage( "homework_2.jpg" );

	/*判斷是否出錯*/
	if (!src1 || !src2)
	{
		if (!src1)
			printf( "failed to load %d.\n", "homework_1.jpg" );
		if (!src2)
			printf( "failed to load %d.\n", "homework_2.jpg" );
		return -1;
	}

	/*創建圖像空間*/
	IplImage* differ12 = cvCreateImage( cvGetSize(src1), IPL_DEPTH_8U, 3 );
	IplImage* cleandiff = cvCreateImage( cvGetSize(src1), IPL_DEPTH_8U, 3 );
	IplImage* dirtydiff = cvCreateImage( cvGetSize(src1), IPL_DEPTH_8U, 3 );

	/*創建並命名窗口*/
	cvNamedWindow( "differ12", CV_WINDOW_NORMAL );
	cvNamedWindow( "cleandiff", CV_WINDOW_NORMAL );
	cvNamedWindow( "dirtydiff", CV_WINDOW_NORMAL );

	/*圖像處理*/
	cvAbsDiff( src1, src2, differ12 );					//differ12 = |src1 - src2|

	cvErode( differ12, cleandiff );
	cvDilate( cleandiff, cleandiff );					//對differ12先進行腐蝕,然後進行膨脹操作(開運算),賦給cleandiff

	cvDilate( differ12, dirtydiff );
	cvErode( dirtydiff, dirtydiff );					//對differ12先進行膨脹,然後進行腐蝕操作(閉運算),賦給dirtydiff

	/*顯示圖像*/
	cvShowImage( "differ12", differ12 );
	cvShowImage( "cleandiff", cleandiff );
	cvShowImage( "dirtydiff", dirtydiff );

	/*釋放內存與銷燬窗口*/
	cvWaitKey(0);
	cvReleaseImage( &differ12 );
	cvReleaseImage( &cleandiff );
	cvReleaseImage( &dirtydiff );
	cvDestroyAllWindows();

	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章