利用opencv實現截圖函數

點擊打開鏈接

SafeResetSizeOfRect函數的作用調整rect矩形的大小,防止它超過img圖像的尺寸範圍

// 矩形截圖
bool Screenshot( IplImage* src, IplImage* dst, CvRect rect )
{
	cvSetImageROI( src, rect );
	cvCopy( src, dst, 0 );
	cvResetImageROI( src );
	return 0;
}

// 安全重置矩形大小
void SafeResetSizeOfRect( IplImage* src, CvRect& rect )
{
	rect.x = rect.x < 0 ? 0 : rect.x;
	rect.y = rect.y < 0 ? 0 : rect.y;
	rect.width  = rect.width < 0 ? 0 : rect.width;
	rect.height = rect.height < 0 ? 0 : rect.height; 

	if ( rect.x > src->width || rect.y > src->height ) 
	{
		rect = cvRect( 0, 0, src->width, src->height );
	}
	rect.width = std::min( rect.width, src->width - rect.x );
	rect.height = std::min( rect.height, src->height - rect.y );
} 
int _tmain(int argc, _TCHAR* argv[])
{
	const char *srcPath	    = "F:\\圖片\\00test.jpg";
	const char *saveFilePath    = "F:\\圖片\\00res.jpg";

	CvRect rect = cvRect( 10, 10, 100, 100 );
	IplImage *img = cvLoadImage( srcPath, 1 );
	IplImage *dst = 0;

	SafeResetSizeOfRect( img, rect );
	dst = cvCreateImage( cvSize(rect.width, rect.height), img->depth, img->nChannels );
	Screenshot( img, dst, rect );

	cvSaveImage( saveFilePath, dst );

	cvReleaseImage( &img );
	cvReleaseImage( &dst );

	return 0;
}


發佈了22 篇原創文章 · 獲贊 94 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章