序
- 在使用rect作为感兴趣区域的时候一直没有弄懂使用感兴趣区域如何将处理后图像拼到原图像中 以及 使用感兴趣区域定位的坐标要是不是原图像的坐标这两个问题,查了很多资料,大多数都是用代码一笔带过。
- 自己写的测试代码是利用感兴趣区域在其中绘图的程序,原图死活没有变化(最后发现是因为通道问题)。所以写一篇笔记梳理一下ROI和Rect相关的知识和应用。
感兴趣区域:ROI
首先先回答下上面两个问题
- ROI实际是指针指到了图片设置的ROI的左上角,所以修改ROI原图也同时会被修改
- 同上因为是指针指向原图像,所以在原图像中的坐标仍然需要进行计算得出。
截了rect数据结构的图片:
感兴趣区域的作用
- 感兴趣区域是图像的局部区域。好处是使用感兴趣区域进行处理时,不会被其他区域干扰、也可以加快处理速度等。
- 像截取了一张小图片一样,我们只对这张图片进行处理就可以了,因其ROI指向的还是原图,所以在对ROI区操作会影响原图。
- openCV中比较常用的提取ROI则是使用RECT
Rect使用
// 利用Mat获取ROI
//rect(左上x,左上y,长度,高度)
Rect rect(130, 20, 300-130, 230-20);
//取src源图像中ROI区域
Mat roi = src(rect);
//显示ROI
imshow("roi", roi);
//将ROI克隆到image
Mat image = roi.clone();
当然,譬如将图像中一块区域平移到另一块区域,只需要设置两个ROI,互相clone就可以。
Rect类常用处理:
Rect矩阵类常用函数
若创建一个Rect对象rect(100, 50, 50, 100)
rect.area();
//返回rect的面积 5000rect.size();
//返回rect的尺寸 [50 × 100]rect.tl();
//返回rect的左上顶点的坐标 [100, 50]rect.br();
//返回rect的右下顶点的坐标 [150, 150]rect.width();
//返回rect的宽度 50rect.height();
//返回rect的高度 100rect.contains(Point(x, y));
//返回布尔变量,判断rect是否包含Point(x, y)点
Rect矩形交集并集、平移缩放等
- 交集与并集
a.rect = rect1 & rect2;
b.rect = rect1 | rect2;
- 平移与缩放
a.rect = rect + Point(-100, 100);
//平移,也就是左上顶点的x坐标-100,y坐标+100
b.rect = rect + Size(-100, 100);
//缩放,左上顶点不变,宽度-100,高度+100 - 对比矩形,返回bool
a.rect1 == rect2;
b.rect1 != rect2;
Rect构造函数 Rect_()
,形参列表为空,即定义一个空窗口(默认值为:x=y=width=height=0);Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)
,定义一个左上角点坐标为(_x, _y)的_width*_height矩形窗口;Rect_(const Rect_& r)
,使用其他的Rect_对象初始化;Rect_(const CvRect& r)
,使用CvRect对象初始化;Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz)
,分别将位置坐标(_x, _y)和窗口大小(_width, _height)用Point_和Size_对象初始化;Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2)
,分别将坐标位置(_x, _y)和窗口大小(_width, _height)用Point_和Point_对象初始化。
参考文献
- https://www.jianshu.com/p/8025fa953545
- https://blog.csdn.net/qq_41204464/article/details/89736793
撰写时间
20210720
爷爷们点个赞三个连吧,比心心
/*
* **************************************************************************
* ******************** ********************
* ******************** COPYRIGHT INFORMATION ********************
* ******************** ********************
* **************************************************************************
* *
* _oo8oo_ *
* o8888888o *
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/'==='\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||_ \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' __/-. / *
* ___'. .' /--.--\ '. .'___ *
* ."" '< '.___\_<|>_/___.' >' "". *
* | | : `- \`.:`\ _ /`:.`/ -` : | | *
* \ \ `-. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/ ___.`____.-`===== *
* `=---=` *
* **************************************************************************
* ******************** ********************
* ******************** ********************
* ******************** 佛祖保佑 永远无BUG ********************
* ******************** ********************
* **************************************************************************
*/