当前位置: 首页 > news >正文

【Opencv】cv::rectangle、cv::getTextSize、cv::putText、cv::Rect函数详解和示例

本文通过原理详解和示例说明,对cv::rectangle、cv::getTextSize、cv::putText、cv::Rect函数进行了详细的解读,有助于读者的理解和使用。

cv::Rect ()

cv::Rect 是 OpenCV 库中的一个数据结构,用于表示矩形区域。它包含四个属性:左上角坐标(x,y)和矩形的宽度、高度。

下面是 cv::Rect 的构造函数和使用示例:

#include <opencv2/opencv.hpp>
using namespace cv;int main()
{// 创建一个 cv::Rect 对象,指定左上角坐标 (50, 50) 和宽度、高度 (100, 100)Rect rect(50, 50, 100, 100);// 显示矩形区域的坐标和大小std::cout << "Rect: (" << rect.x << ", " << rect.y << "), Size: (" << rect.width << ", " << rect.height << ")" << std::endl;return 0;
}

在上面的示例中,我们使用 cv::Rect 的构造函数创建了一个矩形区域,其中左上角坐标为 (50, 50),宽度为 100,高度为 100。然后,我们通过访问 cv::Rect 对象的属性来获取矩形区域的坐标和大小,并将其打印到控制台上。
在这里插入图片描述

除了构造函数之外,cv::Rect 还提供了一些常用的方法,如 x、y、width 和 height,用于获取和设置矩形区域的属性。此外,还可以使用 cv::Rect 进行比较运算(如相等、包含)和数学运算(如加法、减法)。

cv::rectangle()

cv::rectangle() 是 OpenCV 库中的一个函数,用于在图像上绘制矩形。它接受以下参数:

img:输入图像,可以是彩色或灰度图像。
r:矩形的位置和大小。它是一个 cv::Rect 对象,包含左上角坐标(x,y)和宽度、高度。
color:矩形的颜色。通常使用 BGR 格式的 cv::Scalar 对象表示。
thickness:线条的厚度。如果为负数,则会填充矩形。
下面是一个示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;int main()
{Mat img = imread("image.jpg");if (img.empty()){std::cout << "Could not read the image." << std::endl;return -1;}Rect r(50, 50, 100, 100); // 定义矩形位置和大小Scalar color = Scalar(0, 255, 0); // 定义矩形颜色(绿色)int thickness = 2; // 定义线条粗细// 在图像上绘制矩形rectangle(img, r, color, thickness);// 显示图像imshow("Rectangle", img);waitKey(0);return 0;
}

在上面的示例中,我们首先读取一张图像,并检查是否成功读取。然后,我们定义一个 cv::Rect 对象来指定矩形的位置和大小。接着,我们使用 cv::Scalar 对象定义矩形的颜色(这里选择了绿色),并指定线条的粗细。最后,我们调用 cv::rectangle() 函数在图像上绘制矩形,并通过 imshow() 和 waitKey() 显示图像。

在这里插入图片描述

cv::putText()

cv::putText() 是 OpenCV 库中的一个函数,用于在图像上绘制文本。下面是函数的详细说明:

函数原型:

void cv::putText(Mat& img, const String& text, Point org, int fontFace, double fontScale, Scalar color, int thickness = 1, int lineType = 8, bool bottomLeftOrigin = false)

参数解释:

img:要在其上绘制文本的图像。
text:要绘制的文本字符串。
org:文本的起始位置。
fontFace:字体类型,可以使用 FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_PLAIN、FONT_HERSHEY_DUPLEX 等常量。
fontScale:字体缩放比例。
color:文本颜色,可以使用 Scalar 对象表示。
thickness:线条粗细,默认为1。
lineType:线条类型,默认为8(实线)。
bottomLeftOrigin:是否按照左下角作为坐标原点,默认为false(左上角作为原点)。
示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;int main()
{Mat image = imread("image.jpg");String text = "Hello, OpenCV!"; // 要绘制的文本字符串Point org(10, 50); // 文本起始位置Scalar color(0, 255, 0); // 文本颜色(BGR)int thickness = 2; // 线条粗细int fontFace = FONT_HERSHEY_SIMPLEX; // 字体类型double fontScale = 1; // 字体缩放比例// 在图像上绘制文本cv::putText(image, text, org, fontFace, fontScale, color, thickness);// 显示图像cv::imshow("Text Example", image);cv::imwrite("image1.jpg", image);cv::waitKey(0);return 0;
}

在上面的示例中,我们加载一幅图像,并定义了要绘制的文本字符串、起始位置、颜色、线条粗细、字体类型和字体缩放比例。然后,我们使用 cv::putText() 函数在图像上绘制文本。最后,我们显示图像并等待用户按下任意键退出程序。
在这里插入图片描述

cv::getTextSize()

cv::getTextSize() 函数用于计算文本在图像中的大小。它接受文本字符串、字体、字体大小、线条粗细等参数,并返回一个 cv::Size 对象,表示文本的宽度和高度。这个函数可以帮助我们确定文本在图像中的位置和大小,以便我们可以在正确的位置绘制文本。

示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;using namespace cv;int main() {cv::Mat image = imread("image.jpg");cv::Scalar color(0, 0, 255);  // 设置颜色为红色int fontFace = cv::FONT_HERSHEY_SIMPLEX;  // 使用Hershey Simplex字体double fontScale = 1;  // 字体缩放比例为1int thickness = 2;  // 设置文本线的厚度为2std::string text = "Hello, OpenCV!";  // 需要测量大小的文本字符串// 获取文本大小cv::Size size = cv::getTextSize(text, fontFace, fontScale, thickness,NULL);std::cout << "Text size: (" << size.width << ", " << size.height << ")" << std::endl;  // 打印文本大小// 在图像上绘制文本cv::putText(image, text, cv::Point(100- size.width, 100- size.height), fontFace, fontScale, color, thickness);image.convertTo(image, CV_8U);  // 转换为8位无符号整数(即CV_8U)以显示图像cv::imshow("Image with text", image);  // 显示图像cv::waitKey(0);  // 等待用户按键,0表示无限等待cv::imwrite("image1.jpg", image);return 0;
}

在这里插入图片描述

在上面的示例中,我们通过cv::getTextSize()函数获得了相应的宽高尺寸,在把文本放上去的时候,结合Size的尺寸,结果如上图所示,一部分文字无法加在图像上。这就是Size设置大小和文本起始点的原因。

http://www.xdnf.cn/news/860851.html

相关文章:

  • Linux培训班多少钱?推荐6大Linux云计算运维培训机构名单
  • 13 万字 C 语言从入门到精通保姆级教程2021 年版
  • Windows核心编程学习笔记(20)--同步设备I/O与异步设备I/O1
  • 以数据安全为核心的安全立体防御体系解决方案
  • 摄氏度和开氏度的换算_摄氏度与开氏度换算(开氏度和摄氏度的换算公式)
  • 红客是什么呢?零基础如何成为红客!
  • 八数码难题的多种解法
  • Arduino as ISP 下载器烧录BootLoader的细节详解
  • 聚类分析
  • sql server2008的安装包和密钥
  • 我的软考经验分享
  • 创业者不得不去的10个网站!
  • activate-power-mode安装与设置(去掉activate-power-mode右上角图标)
  • 苹果手机下载不了软件怎么办?6个解决方案等你来
  • aptana手动配置python环境_关于使用Aptana+Pydev构建Python开发环境(Django)
  • 运维工作内容
  • 分销系统搭建流程详解,教你搭建SaaS分销系统!
  • 高防服务器如何防御?
  • 【专访】首届腾讯社交广告“高校算法大赛”落幕 冠亚季军团队参赛心得精彩分享
  • 网页客服系统全解析:在线服务的高效解决方案
  • C语言基本语法知识
  • java入门基础语法--方法(超全详细)
  • 20种富含维生素A的食物盘点,赶紧保存收藏!
  • 减肥日记
  • kernel printk的打印等级
  • 华为鸿蒙系统好在哪,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  • 关于EEG以及如何解释EEG?
  • 百度旗下手机应用大盘点
  • 007-软件测试分类
  • 什么是S-OFF(小白扫盲)