opencv中Rect()类与rectangle()函数详解

news2024/11/24 1:24:39

文章目录

        • Rect()矩形类
          • 1、实例化 Rect() 类:
            • (1)构造函数:
          • 2、Rect类的成员函数
            • (1)rect.size() 和 rect.area() 和 rect.width() 和 rect.height(),用来描述矩形的宽度,高度,尺寸和面积;
            • (2)br() 和 tl(),用来描述矩形坐标点的
            • (3)rect.contains(Point(x, y)) 和 rect.inside(Point(x, y)),用来判断点是否在矩形中,返回值都是bool类型
            • (4)对矩形进行比较,返回布尔变量
            • (5)对矩形进行平移和缩放:
            • (6)矩形运算,求两个矩形的交集和并集
        • rectangle()函数
          • 1、函数原型1:绘制出的是矩形框或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
            • (1)参数解释:
            • (2)示例:
          • 2、函数原型2:利用 Rect()矩形类绘制矩形或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
            • (1)参数解释:
            • (2)示例:

Rect()矩形类

Rect()矩形类,主要作用是绘制矩形,rectangle()函数可以利用 Rect()矩形类,来绘制矩形;

1、实例化 Rect() 类:
(1)构造函数:
Rect rect(int x, int y, int width, int height);
Rect rect(100, 50, 50, 100);

创建矩形对象的构造函数有四个参数,左上角的坐标(x,y)和矩阵的宽度和高度
2、Rect类的成员函数
(1)rect.size() 和 rect.area() 和 rect.width() 和 rect.height(),用来描述矩形的宽度,高度,尺寸和面积;
  • rect.width() // 返回rect的宽度 50
  • rect.height() // 返回rect的高度 100
  • rect.size() // 返回rect的尺寸 [50 × 100]
  • rect.area() // 返回rect的面积 5000
(2)br() 和 tl(),用来描述矩形坐标点的
  • rect.br() // 返回rect的右下角顶点的坐标 [150, 150]
  • rect.tl() // 返回rect的左上角顶点的坐标 [100, 50]
(3)rect.contains(Point(x, y)) 和 rect.inside(Point(x, y)),用来判断点是否在矩形中,返回值都是bool类型
  • rect.contains(Point(x, y)) // 判断rect是否包含Point(x, y)点,两个函数用法相同
  • rect.inside(Point(x, y)) // 判断rect是否包含Point(x, y)点,两个函数用法相同
(4)对矩形进行比较,返回布尔变量
  • rect1 == rect2
  • rect1 != rect2
(5)对矩形进行平移和缩放:

Rect类可以通过简单的与一个Point类型变量相加实现矩形平移,以及与一个Size类型变量相加实现矩形的放缩

  • rect = rect + Point(-100, 100); // 平移,也就是左上顶点的x坐标-100,y坐标+100
  • rect = rect + Size(-100, 100); // 缩放,左上顶点不变,宽度-100,高度+100

扩展

1、OpenCV里没有判断rect1是否在rect2里面的功能,所以自己写一个 
bool isInside(Rect rect1, Rect rect2)  
{  
    return (rect1 == (rect1&rect2));  
}  

2、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;  
}  
  
3、围绕矩形中心缩放函数  
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);  
}  
(6)矩形运算,求两个矩形的交集和并集
  • rect = rect1 & rect2
  • rect = rect1 | rect2
Mat m1 = imread("1.jpg");
Mat m2 = imread("1.jpg");
Rect rect1(0,0,300,300);
Rect rect2(0, 0, 100, 100);
Scalar s(255, 255, 0);

Rect rt1 = rect1 & rect2; //取并集
rectangle(m1, rt1, s);
Rect rt2 = rect1 | rect2; //取交集
rectangle(m2, rt2, s);
imshow("交集", m1);
imshow("并集", m2);

rectangle()函数

rectangle()函数的主要作用是给图片的指定区域加上矩形边框,通常用在图片的标记上,使图片处理的目标区域可视化,便于我们对目标区域的处理;

1、函数原型1:绘制出的是矩形框或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
void rectangle( InputOutputArray img,
		Point(i,j) pt1, 
		Point(i+img.cols, j+img.rows) pt2,
                const Scalar &color, 
		int thickness = 1,
                int lineType = LINE_8, 
		int shift = 0 );
(1)参数解释:
  • img:被处理的图片;
  • pt1:矩形左上角顶点的坐标;
  • pt2:矩形对角线上,右下角顶点的坐标;
  • color:线条颜色 (RGB) 或 亮度(灰度图像);
  • thickness:矩形框线条的粗细,等于1时表示线宽为1个像素(thickness小于0表示填充即画一个实心的矩形,大于0表示绘制即画一个矩形框);
  • line_type:线条的类型;
  • shift:坐标点的小数点位数;
// line_type 线条的类型
enum LineTypes {
    FILLED  = -1,
    LINE_4  = 4, 
    LINE_8  = 8, 
    LINE_AA = 16
};
(2)示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>

using namespace cv;

int main()
{
	Mat image = imread("C:\\Users\\Pictures\\suzy.jpg");

	rectangle(image, cv::Point(100, 150), Point(250, 300), Scalar(0, 0, 255),4);

	imshow("rectangle", image);
	waitKey(0);

	return 0;
}
2、函数原型2:利用 Rect()矩形类绘制矩形或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
void rectangle( InputOutputArray img,
	 	Rect 	rect,
		const 	Scalar &color,
		int 	thickness = 1,
		int 	lineType = LINE_8,
		int 	shift = 0 )
(1)参数解释:
  • img:被处理的图片;
  • rect:绘制矩形的规格;
  • color:绘制矩形的颜色 (RGB) 或 亮度(灰度图像);
  • thickness:同上;
  • line_type:同上;
  • shift:同上;
(2)示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>

using namespace cv;

int main()
{
	Mat image = imread("C:\\Users\\Pictures\\suzy.jpg");

	Rect rect;
	rect.x = 100;
	rect.y = 150;
	rect.width = 150;
	rect.height = 150;

	// 开始绘制矩形框
	rectangle(image, rect, Scalar(0, 0, 255),4);

	imshow("rectangle", image);
	waitKey(0);

	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL专家云回溯某时间段内的阻塞

背景 SQL专家云像“摄像头”一样&#xff0c;对环境、参数配置、服务器性能指标、活动会话、慢语句、磁盘空间、数据库文件、索引、作业、日志等几十个运行指标进行不同频率的实时采集&#xff0c;保存到SQL专家云自己的数据库中。因此可以随时对任何一个时间段进行回溯。 趋势…

基于C++、GDAL、OpenCV的矢量数据骨架线提取算法

基于C、GDAL、OpenCV的矢量数据骨架线提取算法 CGAL已经实现了该功能&#xff0c;但由于CGAL依赖于Boost库&#xff0c;编译后过大&#xff0c;因此本文所采用的这套方式实现骨架线提取功能。 效果&#xff1a; 思路&#xff1a; 1、将导入shp按照要素逐一拆分成新的shp 2、…

java中如何将一个集合list转成以逗号隔开的字符串

事例代码 代码&#xff1a; package com.air.app;import java.util.ArrayList; import java.util.List;public class ListToStringTest {public static void main(String[] args) {//定义list集合List<String> list new ArrayList<>();list.add("1");…

SolidUI AI生成可视化,开创性开源项目,版本0.1.0 功能讲解

文章目录 背景项目名字含义登录页含义产品思维0.1.0 版本内涵功能列表数据源管理项目管理设计页面 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。Solid…

多元分类预测 | Matlab基于麻雀算法优化深度置信网络(SSA-DBN)的分类预测,多特征输入模型,SSA-DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab基于麻雀算法优化深度置信网络(SSA-DBN)的分类预测,多特征输入模型,SSA-DBN分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

linux_driver_day03

作业1 题目&#xff1a; 通过ioctl函数选择不同硬件的控制&#xff0c;LED 蜂鸣器 马达 风扇 代码&#xff1a; 代码太多只展示 led 部分&#xff0c;点击查看完整代码 led.c #include "led.h" #include "head.h"static void all_led_init(void);stati…

问题1:矩阵置零 问题2:搜索二维矩阵

问题1&#xff1a;矩阵置零 给定一个 *m* x *n* 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路&#xff1a; 1.先遍历一遍矩阵&#xff0c;将元素为0的行和列都标记为true 2.再遍历一遍矩阵&#xff0c…

Element 实现动态增加多个输入框并校验

文章目录 前言实现通过按钮动态增加表单并验证必填实现动态多个输入框为行内模式&#xff0c;其它为行外模式 前言 在做复杂的动态表单&#xff0c;实现业务动态变动&#xff0c;比如有一条需要动态添加的el-form-item中包含了多个输入框&#xff0c;并实现表单验证&#xff0…

Visual Studio Code 如何设置整体界面字体的大小?

在某次操作中&#xff0c;我不小心误点了什么&#xff0c;导致 Visual Studio Code 界面的字体变小了很小&#xff0c;如下图所示&#xff1a; 我想把字体调整回来&#xff0c;该如何操作呢&#xff1f; 首先&#xff0c;第一步&#xff0c;打开设置&#xff1a; 第二步&#…

MiniLED是什么?有怎样的发展前景

Mini LED又叫做“次毫米发光二极管”&#xff0c;也是LED器件的一种&#xff0c;其芯片尺寸介于50~200μm之间。Mini LED的组成包括Mini LED像素阵列以及驱动电路&#xff0c;而且像素中心间距的单元较小&#xff0c;仅为0.3-1.5mm单元。随着 Mini LED 显示技术的快速发展&…

Nginx+Tomcat负载均衡(反向代理)、动静分离集群

NginxTomcat负载均衡、动静分离 一、正向代理与反向代理二、负载均衡--with-stream #启用 stream模块&#xff0c;提供4层调度 一、正向代理与反向代理 Nginx:正向代理&#xff08;知道目标服务器&#xff09; 反向代理&#xff08;不知道目标服务器&#xff09; Nginx配置反…

QWebEngine应用---执行javascript

我们都知道现代前端技术是基于html、css和javascript进行显示交互的&#xff0c;其中html和css属于静态界面显示&#xff0c;辅以javascript使页面交互更丰富。浏览器作为前端页面显示的基石&#xff0c;提供一套显示、交互、调试的东西。QWebEngine同样也提供了这些功能&#…

CodeTop整理-数组篇

目录 53. 最大子序和 33. 搜索旋转排序数组 三数之和 121. 买卖股票的最佳时机 4. 寻找两个正序数组的中位数 695. 岛屿的最大面积 54. 螺旋矩阵 88. 合并两个有序数组 152. 乘积最大子数组 42. 接雨水 64. 最小路径和 1. 两数之和 123. 买卖股票的最佳时机 III …

IDEA完全免费AI辅助编程插件BITO-GPT4安装及中文国产化设置

打开IDEA的plugins 搜索BITO&#xff1a; 下载后右边工具栏上会出现BITO的小蓝标&#xff0c;这样就可以使用了但是里面是全英文的 设置中文 1.打开BITO点击右上角设置 点击里面的Settings 进入BITO的Web网页 右边这个改成中文&#xff1a; 这样回到IDEA AI就会生成中…

【HTML】使用 div 自定义实现 input、textarea 输入框(适合定制化场景)

文章目录 一、实现 Input 组件二、实现 Textarea 组件三、React 实践案例 API参考文档: contenteditable : https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/contenteditableresize &#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/resiz…

【Linux】shell脚本: 基本语法 和 高级特性

Shell脚本是一种用Shell语言编写的程序&#xff0c;它可以实现自动化的任务&#xff0c;如批量处理文件、监控系统状态、定时备份等。本文包括&#xff1a; Shell脚本的定义和作用&#xff1a;介绍什么是Shell脚本&#xff0c;它有哪些优点和缺点&#xff0c;它可以用来做什么。…

【macOS 系列】如何在mac下安装nvm实现多版本nodejs

文章目录 一、安装 nvm二、提示 commond not found:nvm的问题 一、安装 nvm 注意&#xff1a;mac下用nvm。win下用nvm-windows 以下步骤都是在命令行工具下执行&#xff1a; 1、安装 curl -o- [https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh](https://…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试

下载镜像 CentOS 2 3 4 5 6 等历史老版本下载地址 国内镜像地址_hkNaruto的博客-CSDN博客 下载CentOS 5.0 1-7 ISO文件 注意&#xff1a;尝试过下载DVD版本&#xff0c;速度太慢了。还是通过国内镜像下载这几个iso快。 安装虚拟机 VirtualBox 挂载第一个iso&#xff0c;启动…

计算机基础--->数据结构(7)【红黑树】

文章目录 二三树二三树的性质二三树一个简单的插入例子二三树的特点 红黑树红黑树的特点红黑树的节点红黑树的插入操作1. 左旋2. 右旋颜色翻转3. 颜色翻转插入实例 二三树 二三树与红黑树的性质非常相似&#xff0c;但是二三树能更直观的让人理解构建过程 二三树的性质 二三树是…

【机器学习核心总结】什么是GBDT(梯度提升树)

什么是GBDT(梯度提升树) 虽然GBDT同样由许多决策树组成&#xff0c;但它与随机森林由许多不同。 其中之一是GBDT中的树都是回归树&#xff0c;树有分类有回归&#xff0c;区分它们的方法很简单。将苹果单纯分为好与坏的是分类树&#xff0c;如果能为苹果的好坏程度打个分&…