首页 > 代码库 > 摄像头图像比较的有趣现象

摄像头图像比较的有趣现象

最近在学习研究OpenCV,做了个摄像头前后帧的比较效果,发现通过比较后,能发现物体轮廓。


具体算法见下:


//比较两张图片
BOOL COpencvCameraCtrl::DiffTwoPic()
{
	Mat pre_gray;

	cv::namedWindow( "showCamera" );

	cv::namedWindow( _T("jg") );

	while(true)
	{
		//取得图像
		Mat frame, bigFrame;
		vc >> bigFrame;

		if( !bigFrame.data )
		{
			continue;
		}

		//frame = bigFrame( cv::Rect( 330, 200, 100, 70 ) );
		frame = bigFrame;

		cv::imshow( "showCamera", frame );
		
		Mat frame_gray;
		cv::cvtColor( frame, frame_gray, CV_BGR2GRAY  );

		if( !pre_gray.empty() )
		{			
			//比较图像
			Mat abcdiff, erosion_dst;
			cv::absdiff(pre_gray, frame_gray, abcdiff);

			
			//腐蚀操作
			/*
			int erosion_size = 1;
			int erosion_type = MORPH_RECT;

			Mat element = getStructuringElement( erosion_type,
				Size( 2*erosion_size + 1, 2*erosion_size+1 ),
				Point( erosion_size, erosion_size ) );

			/// 腐蚀操作
			erode( abcdiff, erosion_dst, element );
			*/

			//二值化操作
			
			Mat matthre;
			threshold( abcdiff, matthre, 5, 255, 0 );
			

			cv::imshow( _T("jg"), matthre );
			

			int nCount = cv::countNonZero( abcdiff );		
			
			if( nCount > 30 )
			{
				//Beep(5500,150);				
			}	
		}
		//保存图像
		frame_gray.copyTo(pre_gray);	

		cv::waitKey(30);
		
	}

	return TRUE;
}


处理效果,如下图所示:



该效果是未加腐蚀处理的效果,如果添加了腐蚀处理后,整张图片将是黑色。说明看到的轮廓中差异点都是些离散的点,不能直接被引用。

摄像头图像比较的有趣现象