最近看美剧 《TELL LIE TO ME》,对里边的一些东西非常感兴趣,具体就是摄像头目录然后会自动截取眼睛的图像到另外一个屏幕,想用OPENCV实现下。

自己开始使用OPENCV对很多东西都不怎么熟悉,可以使用OPENCV既有的算法检测到眼睛,然后就差截取眼睛部分的图像了,在网络上找了很多,大概只有一种可用的方法,具体如下:

使用的函数只有两个:

//

CvMat* cvGetSubRect(const CvArr* arr, CvMat* submat, CvRect rect);

/* arr Input array

submat Pointer to the resultant sub-array header

rect Zero-based coordinates of the rectangle of interest

The function returns header, corresponding to a specified rectangle of the input array. In other

words, it allows the user to treat a rectangular part of input array as a stand-alone array. ROI is

taken into account by the function so the sub-array of ROI is actually extracted. */

从结构arr中获取rect指向的内容,然后将这些内容复制到submat结构中,表达式采用链式表达,把内容复制到submat后,并返回submat的地址,使用过opencv的人都知道, CvArr不是一种具体的结构,可以使图像、矩阵等,具体图像位置有CvRect结构决定。

typedef struct CvRect

{

int x; //矩形的起始点X坐标

int y; //矩形的起始点Y坐标

int width; //矩形的宽

int height; //矩形的高

}

CvRect;

使用完cvGetSubRect()函数后,截取的图像就被复制到submat结构中了,下一步需要做的是从CvMat结构中转换数据到IPlImage类型。使用如下函数:

IplImage* cvGetImage(const CvArr* arr, IplImage* imageHeader);

/*

arr Input array

imageHeader Pointer to IplImage structure used as a temporary buffer

*/

这同样是一个链式表达,arr参数就是使用cvGetSubRect()函数中的submat参数对应的参数,IplImage*参数就对应实际图像结构的指针,同样链式表达也会返回这个结构的指针。

使用如上的函数就可以完成图像的截取。

基于上述的链式表达,可以使用一条语句完成,如:

cvGetImage(cvGetSubRect(frame_copy,&test,Rect_eys),eye_img);

具体参数不做详细解释了。

这里需要注意一些常犯的错误:

1.CvMat* cvGetSubRect(const CvArr* arr, CvMat* submat, CvRect rect);

这个函数中的 submat,一定要申请相应的空间在传递参数,实际的数据会复制到相应指针指向的空间,这里我犯了错误。

2. CvMat* cvGetSubRect(const CvArr* arr, CvMat* submat, CvRect rect);

函数中的参数rect需要注意,它制定的复制数据的位置的大小,可能会发生数据越界,需要额外注意。比如实际图像是400x300,而你制定的起点是(350,250),而宽是100,高是100,这时候,矩形的另外一个顶点就是(450,350),实际图像数据结构中并没有这些空间,就造成越界,我这样的初学者就犯了这样的错误。

opencv 截取图片一部分_Opencv中如何实现图像截取相关推荐

  1. opencv python3 找图片色块_OpenCV中色块的检测与标注

    我在Jupyter笔记本上工作.首先下载您的图像:!wget https://i.stack.imgur.com/SJxo3.png 然后从您的pic创建一个RGBA数组: ^{pr2}$ 我们希望在 ...

  2. opencv调节图片饱和度_OpenCV调整彩色图像的饱和度和亮度

    问题 如何调整彩色图像的饱和度和亮度 解决思路 详细步骤: 将RGB图像值归一化到[0, 1] 然后使用函数cvtColor进行色彩空间的转换 接下来可以根据处理灰度图像对比度增强伽马变换或者线性变换 ...

  3. opencv java图片清晰度_OpenCV 图像清晰度评价(相机自动对焦)

    相机的自动对焦要求相机根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和CCD之间的距离,保证像平面正好投影到CCD的成像表面上.这时候物体的成像比较清晰,图像细节信息丰富. 相 ...

  4. opencv python gpu加速_OpenCV中配置CUDA,实现GPU加速

    1. 查看本机配置,查看显卡类型是否支持NVIDIA GPU,本机显卡为NVIDIA GeForce  GT630: 3. 从https://developer.nvidia.com/cuda-too ...

  5. python opencv改变图片亮度_opencv+python 如何改变图片亮度?

    addWeighted函数:计算两个图像(原图和全黑图)的加权和 dst = cv2.addWeighted(img1, c, blank, 1-c, b) 亮度就是每个像素所有通道都加上b (bri ...

  6. opencv计算图像亮度调节_OpenCV教程创建Trackbar图像对比度、亮度值调整

    这篇文章中我们一起学习了如何在OpenCV中用createTrackbar函数创建和使用轨迹条,以及图像对比度.亮度值的动态调整. 文章首先详细讲解了OpenCV2.0中的新版创建轨迹条的函数crea ...

  7. python opencv打开图片 关闭_自学python-opencv(9)图像开闭操作

    开操作(Open) 图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的 主要是应用在二值图像分析中,灰度图像亦可 开操作=腐蚀+膨胀,输入图像+结构元素 --------------------- ...

  8. java 图像 截取正方形,在java中裁剪矢量图像

    我有一个与矢量图像相关的小型科学项目,更具体地说,是CNC雕刻. 在这个项目中,我需要创建带有块(如正方形)的文件,填充矢量线,矢量线根据特定参数旋转.为此,我使用矢量图2d( http://trac ...

  9. python opencv压缩图片_OpenCV Python 缩放图片

    By 凌顺 2019年9月12日 本示例使用的OpenCV版本是:4.1.1 运行Python的编辑器:Jupyter notebook 示例目的 使用OpneCV的cv2.resize()函数对图片 ...

最新文章

  1. java interface list_你了解注解内的@interface List么
  2. [教程]JS从糊涂到明白:一步一步编写计算器2 – 简化代码
  3. 江诗丹顿geneve系列_江诗丹顿的另一面
  4. 用RPC OVER HTTPS发布Exchange(续)
  5. 如何写一篇合格的论文(清华大学刘知远)
  6. 力扣——字符串转换整数(atoi)
  7. Android开发自定义View之滑动按钮与自定义属性
  8. HTML5学习笔记(二十六):JavaScript的错误处理
  9. 李践《高效人士的五项管理-行动日志》 表格
  10. 如何使用Matlab实现数据的拟合
  11. 利用科学计算机转换角度,角度换算计算器(角度换算弧度计算器)
  12. win10操作系统如何整理桌面
  13. 2022最推荐的四款免费bi工具
  14. SSO(单点登录)技术漫谈
  15. AP计算机科学第12版5-6章参考答案
  16. 2020-04-12
  17. mac系统docker发布镜像报错:错误the user name or passphrase you entered is not correct解决
  18. 刘强东隐退:卸任京东CEO
  19. 今天,我想为产品经理说说话
  20. 国外有哪些比较好的电子技术方面的网站论坛推荐? - 知乎

热门文章

  1. elisa标准曲线怎么做_ELISA标准曲线应该怎么绘制
  2. HTML页面404卡通模版不在地球上
  3. 移动互联网的入口-二维码(二维码生成原理及流程)
  4. 面试官:今天还是来聊聊CMS垃圾收集器呗?
  5. BatchNorm的理解
  6. Autodesk infraworks 开发资料
  7. gis里创建要素面板怎么打开_GIS数据、路桥隧道、地下管网、地形土方,敢不敢用一个软件搞定?...
  8. Qt学习15:打包可执行文件.exe的两种方式
  9. volatile关键字详解
  10. Windows Server 2012 R2 管理员密码忘记如何修改密码