Opencv中rectangle函数与Rect函数的用法
文章目录
- 一、 rect()类
- 二、rectangle()函数
- 三、应用
- 1. 绘制简单、指定粗细或者带填充的 矩形
- 2. Circle绘制圆形。
- 3. Ellipse绘制椭圆圆弧和椭圆扇形
rectangle
函数是用来绘制一个矩形框的,通常用在图片的标记上。
1.rectangle(img2, Point(j,i), Point(j + img4.cols, i + img4.rows), Scalar(255, 255, 0), 2, 8);
img2
:被处理的图片
Point(j,i)
代表矩形左上点的坐标
Point(j + cols, i + rows)
代表矩形右下点的坐标【矩形的大小(cols,rows】
scalar
:颜色
2
代表线条宽度
8
是线型,默认取8
Rect()
函数是画出图像中的矩形
Rect(x,y,width,height)
,x, y
为左上角坐标,width, height
则为长和宽。
Rect roi_rect = Rect(128, 128, roi.cols, roi.rows);
一、 rect()类
template<typename _Tp> class Rect_
{public:typedef _Tp value_type;//! various constructorsRect_();Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);Rect_(const Rect_& r);Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz);Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2);Rect_& operator = ( const Rect_& r );//! the top-left cornerPoint_<_Tp> tl() const;//! the bottom-right cornerPoint_<_Tp> br() const;//! size (width, height) of the rectangleSize_<_Tp> size() const;//! area (width*height) of the rectangle_Tp area() const;//! conversion to another data typetemplate<typename _Tp2> operator Rect_<_Tp2>() const;//! checks whether the rectangle contains the pointbool contains(const Point_<_Tp>& pt) const;_Tp x, y, width, height; //< the top-left corner, as well as width and height of the rectangle
};
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 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_
对象初始化。
//如果创建一个Rect对象rect(100, 50, 50, 100),那么rect会有以下几个功能:
rect.area(); //返回rect的面积 5000
rect.size(); //返回rect的尺寸 [50 × 100]
rect.tl(); //返回rect的左上顶点的坐标 [100, 50]
rect.br(); //返回rect的右下顶点的坐标 [150, 150]
rect.width(); //返回rect的宽度 50
rect.height(); //返回rect的高度 100
rect.contains(Point(x, y)); //返回布尔变量,判断rect是否包含Point(x, y)点 //还可以求两个矩形的交集和并集
rect = rect1 & rect2;
rect = rect1 | rect2; //还可以对矩形进行平移和缩放
rect = rect + Point(-100, 100); //平移,也就是左上顶点的x坐标-100,y坐标+100
rect = rect + Size(-100, 100); //缩放,左上顶点不变,宽度-100,高度+100 //还可以对矩形进行对比,返回布尔变量
rect1 == rect2;
rect1 != rect2; //OpenCV里貌似没有判断rect1是否在rect2里面的功能,所以自己写一个吧
bool isInside(Rect rect1, Rect rect2)
{ return (rect1 == (rect1&rect2));
} //OpenCV貌似也没有获取矩形中心点的功能,还是自己写一个
Point getCenterPoint(Rect rect)
{ Point cpt; cpt.x = rect.x + cvRound(rect.width/2.0); cpt.y = rect.y + cvRound(rect.height/2.0); return cpt;
} //围绕矩形中心缩放
Rect rectCenterScale(Rect rect, Size size)
{ rect = rect + size; Point pt; pt.x = cvRound(size.width/2.0); pt.y = cvRound(size.height/2.0); return (rect-pt);
}
二、rectangle()函数
void rectangle(InputOutputArray img, Point pt1, Point pt2,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);
简介:使用对角线的两点pt1,pt2画一个矩形轮廓或者填充矩形
@param img Image.
@param pt1 Vertex of the rectangle.
@param pt2 Vertex of the rectangle opposite to pt1 .
@param color Rectangle color or brightness (grayscale image).color 线条颜色 (RGB) 或亮度(灰度图像 )
@param thickness Thickness of lines that make up the rectangle. Negative values, like CV_FILLED ,
mean that the function has to draw a filled rectangle.thickness 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形
@param lineType Type of the line.
//! type of line
enum LineTypes {FILLED = -1,LINE_4 = 4, //!< 4-connected lineLINE_8 = 8, //!< 8-connected lineLINE_AA = 16 //!< antialiased line
};
简介:使用矩阵类rec画一个矩形轮廓或者填充矩形
其他参数同上;
rectangle(matImage,Point(20,200),Point(200,300),Scalar(255,0,0),1,1,0); //Rect(int a,int b,int c,int d)a,b为矩形的左上角坐标,c,d为矩形的长和宽
rectangle(matImage,Rect(100,300,20,200),Scalar(0,0,255),1,1,0);
简介:使用矩阵类rec画一个矩形轮廓或者填充矩形
三、应用
1. 绘制简单、指定粗细或者带填充的 矩形
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
img图像.
pt1矩形的一个顶点。
pt2矩形对角线上的另一个顶点
color线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。
thickness组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
line_type线条的类型。见cvLine的描述
shift坐标点的小数点位数。
//包含程序所使用的头文件和命名空间
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
//宏定义部分
#define Win_Name3 "Cross 红十字"
//main函数
int main(int argc,char** argv)
{
<span style="white-space:pre"> </span>//绘制红十字Mat image3 = Mat::zeros(800, 800, CV_8UC3);//生成一个800x800的窗口Rect rec1 = Rect(100, 300, 600, 200);Rect rec2 = Rect(300, 100, 200, 600);rectangle (image3, rec1,Scalar(0, 0, 255), -1, 8, 0);//横矩形rectangle (image3, rec2, Scalar(0, 0, 255), -1, 8, 0);//竖矩形rectangle (image3, Point(100, 300), Point(700, 500), Scalar(0, 255, 255), 2, 8, 0);//黄色矩形镶边rectangle(image3, Point(300, 100), Point(500, 700), Scalar(0, 255, 255), 2, 8, 0);//黄色矩形镶边rectangle(image3, Point(300, 300), Point(500, 500), Scalar(0, 0, 255), 3, 8);//红色正方形覆盖(中央)imshow(Win_Name3, image3);waitKey();return 0;
}
2. Circle绘制圆形。
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
img图像。
center圆心坐标。
radius圆形的半径。
color线条的颜色。
thickness如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
line_type线条的类型。见 cvLine 的描述
shift圆心坐标点和半径值的小数点位数。函数cvCircle绘制或填充一个给定圆心和半径的圆。圆被感兴趣矩形所裁剪。 若指定圆的颜色,可以使用宏 CV_RGB ( r, g, b )。
#include<opencv2/core/core.hpp> //包含程序所使用的头文件和命名空间
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
#define Win_Name2 "Audi 奥迪"
int main(int argc, char** argv)
{//绘制奥迪Audi车标Mat image2 = Mat::zeros(600, 850, CV_8UC3);//生成一个850x600的窗口circle(image2, Point(200, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(200,300),颜色为紫色circle(image2, Point(350, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(350,300),线宽为7circle(image2, Point(500, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(500,300)circle(image2, Point(650, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(650,300)imshow(Win_Name2, image2);waitKey();return 0;
}
3. Ellipse绘制椭圆圆弧和椭圆扇形
void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,double start_angle, double end_angle, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
img图像。
center椭圆圆心坐标。
axes轴的长度。
angle偏转的角度。
start_angle圆弧起始角的角度。.
end_angle圆弧终结角的角度。
color线条的颜色。
thickness线条的粗细程度。
line_type线条的类型,见CVLINE的描述。
shift圆心坐标点和数轴的精度。函数cvEllipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形。圆弧被ROI矩形所忽略。反走样弧线和粗弧线使用线性分段近似值。所有的角都是以角度的形式给定的。
//----------------基本几何图像的绘制---------------
//包含程序所使用的头文件和命名空间
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
#define Win_Name1 "Toyota 丰田" <span style="font-size: 13.3000001907349px; font-family: Tahoma, 'Lucida Grande', Verdana, Helvetica, Arial, sans-serif;">//宏定义部分</span>
//main函数
int main(int argc, char** argv)
{//绘制丰田车标Mat image1 = Mat::zeros(900, 900, CV_8UC3);//900x900的窗口ellipse(image1, Point(450, 450), Size(400, 250), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第一个椭圆,大椭圆,颜色为红色ellipse(image1, Point(450, 450), Size(250, 110), 90, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第二个椭圆,竖椭圆ellipse(image1, Point(450, 320), Size(280, 120), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第三个椭圆,小椭圆(横)imshow(Win_Name1, image1);waitKey();return 0;
}
https://blog.csdn.net/wwwlyj123321/article/details/80563114
https://blog.csdn.net/sinat_34707539/article/details/51912610
Opencv中rectangle函数与Rect函数的用法相关推荐
- 理解OpenCV中的宏定义 CVAPI(函数返回类型)
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 读代码时看到语句 CVAPI(IplImage* ...
- OpenCV中矩阵的归一化*(Normalize函数)
图像处理中,图片像素点单通道值一般是[0-255]的unsigned char类型,将其转化到[0,1]之间,更方便计算,这就需要用到矩阵的归一化运算. 今天,写程序中需要对某矩阵归一化,用OpenC ...
- OpenCV中响应鼠标信息cvSetMouseCallback函数的使用
转自:http://blog.csdn.net/haihong84/article/details/6599838 程序代碼如下: #include <cv.h> #include < ...
- opencv中findContours 和drawContours画图函数
由于小博出来游玩,最近还几天没有发帖了,没事在这看看opencv3.1版本的samples,在运行contours时,发现这个小例子还挺有趣的,不多说,我先贴出图,待会儿再细细讲解,各位请自行玩耍
- OpenCV的Rect()函数、Rectangle()函数、matchTemplate()参数详解
OpenCV的函数 Rect()函数 cvRectangle与cv::rectangle matchTemplate() 归一化函数normalize() Rect()函数 基本概念: Rect(in ...
- OpenCV中感兴趣区域的选取与检测(一)
1.感兴趣区域的选取 感兴趣区域(Region of Interest, ROI)的选取,一般有两种情形:1)已知ROI在图像中的位置:2)ROI在图像中的位置未知. 1)第一种情形 很简单,根据RO ...
- 在OpenCV中利用卷积进行图像滤波
简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...
- OpenCV中颜色分布直方图及其应用
1.图像直方图 直方图是对数据的集合 统计,并将统计结果分布于一系列预定义的 bins 中.这里的 数据 不仅仅指的是颜色灰度值 , 统计数据可能是任何能有效描述图像的特征(如梯度.方向等).特别地, ...
- Python文档阅读笔记-OpenCV中Template Matching
目标 通过模板匹配在一张图中找相似图. 原理 模板匹配这个方法是在一个大图中找小图的功能,OpenCV中使用cv.matchTemplate()这个函数实现.在OpenCV中可以填写几种参数.这个函数 ...
- OpenCV中的图像处理中
图像金字塔 一般情况下,我们要处理是一副具有固定分辨率的图像.但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理.比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸 ...
最新文章
- 一口气说出 过滤器 和 拦截器 6个区别,别再傻傻分不清了
- django安装--mac系统
- 【Java面经】非科班渣硕面经
- 【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)
- 重命名Jakarta EE的Java EE规范
- 160 - 3 Afkayas.2
- Skyline Web 二次开发- 1.地图显示、Position、AttachEvent
- 第26课:JSP Cookie 处理 读取和删除cookie(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
- 好领导,本来应是挖渠人
- 与其说我害怕成为普通人,还不如说我害怕生活,害怕找不到一种自己喜欢的方式去度过人生...
- 巴克莱、高盛支持区块链衍生品领域的ISDA标准
- java国际化转换_java 实现国际化 中英文语言切换
- Bootrom -> bootloader -> kernel -> init >android
- python_matplot_图片批量保存
- vue 项目检测新版本功能
- 常用String方法大全
- 云原生入门 第五章:kubernetes学习实践
- 组织级项目管理成熟度模型 OPM3模型
- linux SSD 寿命
- MongoDB与Spring整合(支持事务)——SpringDataMongoDB