OpenCV里的常用Rect用法
OpenCV里通常定义一个矩形有两种方式,一种是通过矩形左上角和矩形宽高来定义:
Rect_ (_Tp _x, _Tp _y, _Tp _width, _Tp _height)
另一种是通过矩形左上角点坐标和右下角点坐标来定义:
Rect_ (const Point_< _Tp > &pt1, const Point_< _Tp > &pt2)
Rect类常用的成员函数有:
area(),返回Rect的面积;size(),返回Rect的长宽;tl(),返回左上角坐标;br(),返回右下角坐标;width,返回矩形宽度;height,返回矩形高度。
另外,还有几个很方便的用法,比如:
- rect = rect ± point (shifting a rectangle by a certain offset)
- rect = rect ± size (expanding or shrinking a rectangle by a certain amount)
- rect = rect1 & rect2 (rectangles intersection)
- rect = rect1 | rect2 (union of rectangles)
因为求矩形交集和并集在我自己的工程里用的比较多,所以就拿这两个来做个示例:
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"using namespace std;
using namespace cv;int main()
{Mat img = imread("dog.jpg");cout << "img.size() = " << img.cols << " " << img.rows << endl;Rect rect1(100,100,200,200); //使用左上角顶点坐标和矩形宽高定义矩形Rect rect2(150,150,300,400);Rect rect3(Point(200,200), Point(400,500)); //使用左上角顶点坐标和右下角顶点坐标来定义矩形Rect rect4(Point(600,600), Point(900,900)); cout << "rect4.width = " << rect4.width << ", rect4.height = " << rect4.height << endl; //注意width和height后面不带括号 cout << "rect1.tl() = " << rect1.tl() << ", rect1.br() = " << rect4.br() << endl; // 输出左上角和右下角坐标//绘制rect1 ~ rect4rectangle(img, rect1, Scalar(255,0,0), 2);putText(img, "rect1", Point(100,100), FONT_HERSHEY_PLAIN, 1, Scalar(255, 0,0));rectangle(img, rect2, Scalar(0,255,0), 2);putText(img, "rect2", Point(150,150), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255,0));rectangle(img, rect3, Scalar(0,0,255), 2);putText(img, "rect3", Point(200,200), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 255));rectangle(img, rect4, Scalar(0,255,255), 2);putText(img, "rect4", Point(600,600), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255,255));imwrite("rectangles.bmp", img);Rect rect1v2 = rect1 & rect2; //两相交矩形的交集Rect rect1or3 = rect1 | rect3; //两相交矩形的并集Rect rect1or4 = rect1 | rect4; //两不相交矩形的并集Rect rect4Resize = rect4 + Size(100,100); //将矩形rect4的宽高分别扩展100cout << "rect4Resize.width = " << rect4Resize.width << ", rect4Resize.height = " << rect4Resize.height << endl;rectangle(img, rect1v2, Scalar(0), 4);putText(img, "rect1v2", Point(150+50,150), FONT_HERSHEY_COMPLEX, 1, Scalar(0,0,0));rectangle(img, rect1or3, Scalar(255,255,255), 4);putText(img,"rect1or3", Point(100+50, 100), FONT_HERSHEY_COMPLEX, 1, Scalar(255,255,255));rectangle(img, rect1or4, Scalar(255,255,255), 4);putText(img,"rect1or4", Point(100+300, 100), FONT_HERSHEY_COMPLEX, 1, Scalar(255,255,255));rectangle(img, rect4Resize, Scalar(255,255,0), 4);putText(img,"rect4Resize", Point(600+50, 600), FONT_HERSHEY_COMPLEX, 1, Scalar(255,255,0));imwrite("rect_calc.bmp", img);imshow("img", img);waitKey(0);
}
编译:
g++ -std=c++11 test_rect.cpp -o test_rect `pkg-config --cflags --libs opencv`
运行结果:
最初的四个矩形:
求并集、交集和resize之后:
OpenCV里的常用Rect用法相关推荐
- python【Opencv计算机视觉库】opencv模块cv2常用函数用法(全)
文章目录 CV2实践所用到的图片 1.简单读写 2.图片翻转 3.色彩变换 4.给图片加文本 5.绘图 6.图像的表示 CV2实践所用到的图片 bug.png 1.简单读写 import cv2# 读 ...
- python中rect用法_【opencv基础】Rect类的神奇用法
前言 最近看github上源码发现对两个cv::Rect使用相与(&)操作,猛地感觉自己蒙啦,Rect类还有这种神奇用法?!翻看opencv官网Rect类,果然如此! opencv中Rect类 ...
- python Pool常用函数用法总结
在本篇内容里小编给大家整理的是一篇关于python Pool常用函数用法总结内容,有需要的朋友们可以学习下. 1.说明 apply_async(func[,args[,kwds]):使用非堵塞调用fu ...
- C++string类常用函数 c++中的string常用函数用法总结
string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类 ...
- [转]jQuery的each方法的几种常用的用法
下面提一下jQuery的each方法的几种常用的用法 复制代码 代码如下: var arr = [ "one", "two", "three&quo ...
- 在OpenCV里用drawContours画轮廓
在OpenCV里,找到物体的轮廓是最常用的功能,为什么这样说呢?因为太多的应用要使用这个功能了,比如数物体的个数,在种子实验室里常常要使用计算种子的个数,这时就需要拍照种子的照片,然后根据照片来数出种 ...
- 汉语中常用标点符号用法
在项目的开发管理过程,书写文档是不可以避免的事情.正确的使用标点符号能够正确表达自己的意思,也方便别人理解自己书写的文档. 常用标点符号用法简表 一.基本定义 句子,前后都有停顿,并带有一定的句调,表 ...
- RectF Rect用法
RectF Rect用法 一.Canvas类android.graphics.Canvas Canvas类好比手机中的画纸,我们可以在Canvas上画图形或者图像.一般我们用android来绘画的时候 ...
- sqlite3里类似top的用法
sqlite3里类似top的用法 在sqlserver中使用top是很正常的,类似这样的语句: SELECT TOP 10 * FROM [index] ORDER BY id DESC; 但是很不幸 ...
最新文章
- vb matlab 比较,【笔记】VB.NET和MATLAB读取二进制文件(中文+数值)之比较
- java异常及日志注意事项
- ftp服务器文件备份,数据备份是十分重要的,下面是通过ftp将本机数据备份到远程服务器的一个例子...
- 利用 Arthas 解决启动 HDFS StandbyNameNode 加载 EditLog 慢的问题
- 判断dialog是否显示_如何成为一流的仪表维修工之液位测量仪表故障检查判断思路...
- PHP 如何准确取得服务器地址IP[非代理]
- Dell poweredge r210进BIOS修改磁盘控制器(SATA Controller)接口模式
- 这九张动态图诠释什么是自然与科技的完美结合
- BugkuCTF-MISC题三色绘恋
- 如何:将项添加到缓存中
- (转)gcc 的简单使用说明
- Vue 集成 PDF.js 实现 PDF 预览和添加水印
- javascript清理IE内存
- unity 神笔画画
- 滤波反投影重建算法(FBP)实现及应用(matlab)
- 2019年安徽省大学生网络攻防赛赛前培训——Day1
- java使用三目运算符来判断成绩
- SQL Server修改表结构,表和列名加注释说明
- linux发邮件到126,使用126邮箱发送邮件的python脚本
- 出现Unexpected token u in JSON at position 0 报错原因及解决方案