利用opencv实现截图函数

// 矩形截图
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;
}

SafeResetSizeOfRect这个函数的作用调整rect矩形的大小,防止它超过img图像的尺寸范围

时间: 2024-10-24 16:46:12

利用opencv实现截图函数的相关文章

利用opencv的hog+svm实现细胞识别分类器

利用opencv的hog+svm实现细胞识别分类器 图像处理中的细胞识别和人脸识别可以这样来类比,图像中的一张张人脸就是一个个细胞. 模式识别的关键在于样本库的选取,识别率也只能在和样本库比较接近的环境下才能保证.主要工作是三部分一是特征提取,二是样本库的训练train,三是目标检测detect. 一.特征提取 特征提取采用的是HOG特征即HOG描述子,该特征在行人检测中效果非常好.而一般人脸识别采用的是haar特征,这在opencv中都有实现,并都给出了相应的分类器,效果都很不错. 首先采集了

利用opencv的FileStorage类实现XML/YAML文件的读写

FileStorage是opencv2.0以后专门用来读写XML/YAML文件的类,标准的C++实现.利用好XML文件可以极大地方便我们对中间数据的处理. 官方文档: (1) http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.html#fileinputoutputxmlyaml (2) htt

利用opencv中的级联分类器进行人脸检测-opencv学习(1)

OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).注意,新版本的C++接口除了Haar特征以外也可以使用LBP特征. 先介绍一下相关的结构,级联分类器的计算特征值的基础类FeatureEvaluator,功能包括读操作read.复制clone.获得特征类型getFeatureType,分配图片分配窗口的操作setImage.setWindow,计算有序特征calcOrd,计算绝对特征calcC

OpenCV之cv2函数 2

1.主要函数 1. cv2.imread():读入图片,共两个参数,第一个参数为要读入的图片文件名,第二个参数为如何读取图片,包括 cv2.IMREAD_COLOR:读入一副彩色图片:cv2.IMREAD_GRAYSCALE:以灰度模式读入图片:cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道. PS:调用opencv,就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命 令print(img)时得到的结果是None. 2.cv2.imshow():创

【转】利用matlab生成随机数函数

原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵  rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成器 binornd:二项分布的随机数生成器 chi2rnd:卡方分布的随机数生成器 exprnd:指数分布的随机数生成器 frnd:f分布的随机数生成器 gamrnd:伽玛分布的随机数生成器 geornd:几何分布的随机数生成器 hygernd:超几何分布的随机数生成器 lognrnd:对数正态分布

图像边缘检测--OpenCV之cvCanny函数

图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ); image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 cvSobel). 函数 cvCa

利用opencv源代码和vs编程序训练分类器haartraining.cpp

如需转载请注明本博网址:http://blog.csdn.net/ding977921830/article/details/47733363. 一  训练框架 训练人脸检測分类器须要三个步骤: (1) 准备正负样本集,分别放到两个目录里. 我使用的是麻省理工的那个人脸库.大家能够网上搜一下. (2)把正样本集生成正样本描写叙述文件(*.vec),把负样本集生成负样本集合文件.详细怎么操作请參考我博客中的另外两篇文章,各自是http://blog.csdn.net/ding977921830/a

利用Opencv在PictureControl中显示照片

利用Opencv在PictureControl中显示IplImage格式的照片. bool MyDlg::IfExistFile(CString strFilePath) { CFile file; if (file.Open(strFilePath,CFile::modeRead)) { file.Close(); return true; } return false; } bool MyDlg::FillBlankToPicCtrl(const int& nID) { CDC *pDC =

利用PhantomJS 自动截图Kibana ,phpmailer发送网站运营日报

如题,先来张最终效果运营日报 下面介绍下实现过程 [前期准备] kibana配置视图,并做好条件过滤视图,这里就是做介绍,可以参考博文, 视图做好后生成一个短链接,这里我们生成的是 http://10.0.0.110:5601/goto/4d641c075d7cbf2c7d70a82b16436769 1.安装配置PhantomJS # yum -y install gcc gcc-c++ make flex bison gperf ruby   openssl-devel freetype-d