文章目录

  • 一、 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函数的用法相关推荐

  1. 理解OpenCV中的宏定义 CVAPI(函数返回类型)

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 读代码时看到语句 CVAPI(IplImage* ...

  2. OpenCV中矩阵的归一化*(Normalize函数)

    图像处理中,图片像素点单通道值一般是[0-255]的unsigned char类型,将其转化到[0,1]之间,更方便计算,这就需要用到矩阵的归一化运算. 今天,写程序中需要对某矩阵归一化,用OpenC ...

  3. OpenCV中响应鼠标信息cvSetMouseCallback函数的使用

    转自:http://blog.csdn.net/haihong84/article/details/6599838 程序代碼如下: #include <cv.h> #include < ...

  4. opencv中findContours 和drawContours画图函数

    由于小博出来游玩,最近还几天没有发帖了,没事在这看看opencv3.1版本的samples,在运行contours时,发现这个小例子还挺有趣的,不多说,我先贴出图,待会儿再细细讲解,各位请自行玩耍

  5. OpenCV的Rect()函数、Rectangle()函数、matchTemplate()参数详解

    OpenCV的函数 Rect()函数 cvRectangle与cv::rectangle matchTemplate() 归一化函数normalize() Rect()函数 基本概念: Rect(in ...

  6. OpenCV中感兴趣区域的选取与检测(一)

    1.感兴趣区域的选取 感兴趣区域(Region of Interest, ROI)的选取,一般有两种情形:1)已知ROI在图像中的位置:2)ROI在图像中的位置未知. 1)第一种情形 很简单,根据RO ...

  7. 在OpenCV中利用卷积进行图像滤波

    简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...

  8. OpenCV中颜色分布直方图及其应用

    1.图像直方图 直方图是对数据的集合 统计,并将统计结果分布于一系列预定义的 bins 中.这里的 数据 不仅仅指的是颜色灰度值 , 统计数据可能是任何能有效描述图像的特征(如梯度.方向等).特别地, ...

  9. Python文档阅读笔记-OpenCV中Template Matching

    目标 通过模板匹配在一张图中找相似图. 原理 模板匹配这个方法是在一个大图中找小图的功能,OpenCV中使用cv.matchTemplate()这个函数实现.在OpenCV中可以填写几种参数.这个函数 ...

  10. OpenCV中的图像处理中

    图像金字塔 一般情况下,我们要处理是一副具有固定分辨率的图像.但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理.比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸 ...

最新文章

  1. 一口气说出 过滤器 和 拦截器 6个区别,别再傻傻分不清了
  2. django安装--mac系统
  3. 【Java面经】非科班渣硕面经
  4. 【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)
  5. 重命名Jakarta EE的Java EE规范
  6. 160 - 3 Afkayas.2
  7. Skyline Web 二次开发- 1.地图显示、Position、AttachEvent
  8. 第26课:JSP Cookie 处理 读取和删除cookie(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  9. 好领导,本来应是挖渠人
  10. 与其说我害怕成为普通人,还不如说我害怕生活,害怕找不到一种自己喜欢的方式去度过人生...
  11. 巴克莱、高盛支持区块链衍生品领域的ISDA标准
  12. java国际化转换_java 实现国际化 中英文语言切换
  13. Bootrom -> bootloader -> kernel -> init >android
  14. python_matplot_图片批量保存
  15. vue 项目检测新版本功能
  16. 常用String方法大全
  17. 云原生入门 第五章:kubernetes学习实践
  18. 组织级项目管理成熟度模型 OPM3模型
  19. linux SSD 寿命
  20. MongoDB与Spring整合(支持事务)——SpringDataMongoDB

热门文章

  1. 避免社会工程和网络钓鱼攻击
  2. 海康威视错误代码说明(一)(错误代码:1~14)
  3. excel使用教程_有哪些超好用、高质量的Excel学习网站?
  4. python求t分布值_简单数据分布分析与python实现,及
  5. Fiddler抓包https配置
  6. 廖雪峰git教程学习记录
  7. JavaMail概述
  8. 基于docker搭建单机版ELK日志采集系统
  9. 机器视觉运动控制一体机应用|工件同心度检测
  10. ListView列表项View复用--ViewHolder模式