OpenCV(C++)创建图片绘制图形(矩形、圆、文字、线段等等)
一、OpenCV介绍
OpenCV 是基于开源许可证的跨平台计算机视觉库,提供了一组丰富、广泛的图像处理和计算机视觉算法。OpenCV 支持多种编程语言,包括 C++、Python、Java 等,可以运行在 Linux、Windows、Mac OS 等平台上。
OpenCV 能够在图像上绘制各种几何形状、文本和曲线,以及对图像进行调整、裁剪和旋转等操作,这些功能都为图像的分析和处理提供了很大的帮助。
以下是 OpenCV 可以绘制图像的一些应用:
(1)图像标注:在图像上添加标注或者注释,例如在目标检测或者图像分类任务中,通过在图像上绘制框、标签等信息来标记检测到的目标。
(2)处理后显示:例如在图像处理过程中,可以在处理前和处理后的图像上绘制对比图,直观地显示图像处理的效果。
(3)实时显示:通过持续不断地在屏幕上绘画来实现实时显示效果,例如在视频处理中输出处理后的视频流并将其实时渲染在屏幕上。
二、绘制图形
【1】绘制图形弹窗显示
下面代码实现的功能:
使用 OpenCV(C++) 新建一张透明图片,在图片里绘制一个矩形、一条直线、一段文字、一个圆。
// 创建一张大小为 512x512,具有 alpha 通道的透明图片 cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0)); // 在图片上绘制一个矩形 cv::rectangle(img, cv::Point(50, 50), cv::Point(200, 150), cv::Scalar(255, 0, 0, 255), -1); // 在图片上绘制一条直线 cv::line(img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3); // 在图片上绘制一段文本 std::string text = "Hello, OpenCV!"; cv::putText(img, text, cv::Point(50, 300), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2); // 在图片上绘制一个圆 cv::circle(img, cv::Point(400, 350), 50, cv::Scalar(255, 255, 0, 255), -1); // 显示图片 cv::imshow("image", img); cv::waitKey(0);
cv::Mat 是 OpenCV 中表示图像的数据结构,它可以存储多通道的图像。 cv::Scalar 是一个四通道的实数向量,用于表示像素点的颜色和 alpha 值。 cv::Point 是一个二维整型向量,用于表示像素点的坐标。 cv::rectangle 函数用于在图片上绘制矩形。 cv::line 函数用于在图片上绘制直线。 cv::putText 函数用于在图片上绘制文本。 cv::circle 函数用于在图片上绘制圆。
【2】绘制图形保存到本地
// 创建一张大小为 512x512,具有 alpha 通道的透明图片 cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0)); // 在图片上绘制一个矩形 cv::rectangle(img, cv::Point(50, 50), cv::Point(200, 150), cv::Scalar(255, 0, 0, 255), -1); // 在图片上绘制一条直线 cv::line(img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3); // 在图片上绘制一段文本 std::string text = "Hello, OpenCV!"; cv::putText(img, text, cv::Point(50, 300), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2); // 在图片上绘制一个圆 cv::circle(img, cv::Point(400, 350), 50, cv::Scalar(255, 255, 0, 255), -1); // 保存图片到本地 cv::imwrite("output.png", img);
三、函数功能介绍
【1】绘制直线
cv::line 函数用于在图像上绘制一条直线,其参数如下:
void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
- img: 输入输出参数,表示待绘制的目标图像。
- pt1: 输入参数,表示的是直线的起点坐标,是一个 cv::Point 类型的对象。
- pt2: 输入参数,表示的是直线的终点坐标,也是一个 cv::Point 类型的对象。
- color: 输入参数,表示绘制直线的颜色以及透明度,是一个 cv::Scalar 类型的对象。常见的颜色有:红色(0, 0, 255)、绿色(0, 255, 0)、蓝色(255, 0, 0)等。
- thickness: 可选参数,表示绘制直线的宽度。默认值为 1 表示绘制一个像素宽度的直线,如果设置为负值,则表示绘制一条填充直线。
- lineType
- : 可选参数,表示直线的类型,可以取以下几个值:
- cv::LINE_4: 表示绘制一条 4 连通的直线,默认值。
- cv::LINE_8: 表示绘制一条 8 连通的直线。
- cv::LINE_AA: 表示绘制一条抗锯齿的直线。
- shift: 可选参数,表示坐标点像素值所占用的位数,默认为 0。
【2】绘制圆
cv::circle 函数用于在图像上绘制一个圆,其参数如下:
void cv::circle(InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
- img: 输入输出参数,表示待绘制的目标图像。
- center: 输入参数,表示圆心坐标,是一个 cv::Point 类型的对象。
- radius: 输入参数,表示圆的半径。
- color: 输入参数,表示绘制圆的颜色以及透明度,是一个 cv::Scalar 类型的对象。
- thickness: 可选参数,表示圆线条的宽度。默认值为 1 表示绘制一个像素宽度的圆,如果设置为负值,则表示绘制一条填充的圆。
- lineType
- : 可选参数,表示圆边界的类型,可以取以下几个值:
- cv::LINE_4: 表示绘制四个相邻的点的圆边界,默认值。
- cv::LINE_8: 表示绘制八个相邻的点的圆边界。
- cv::LINE_AA: 表示绘制抗锯齿的圆边界。
- shift: 可选参数,表示坐标点像素值所占用的位数,默认值为 0。
【3】绘制矩形
cv::rectangle 函数用于在图像上绘制一个矩形,其参数如下:
void cv::rectangle(InputOutputArray img, Rect rect, const Scalar& color, int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
- img: 输入输出参数,表示待绘制的目标图像。
- rect: 输入参数,表示矩形,是一个 cv::Rect 类型的对象,可以通过传递左上角和右下角坐标的方式来定义一个矩形。
- color: 输入参数,表示绘制矩形的颜色以及透明度,是一个 cv::Scalar 类型的对象。
- thickness: 可选参数,表示矩形边框的宽度。默认值为 1 表示绘制一个像素宽度的矩形,如果设置为负值,则表示绘制一条填充的矩形。
- lineType
- : 可选参数,表示矩形边框的类型,可以取以下几个值:
- cv::LINE_4: 表示绘制四个相邻的点的矩形边框,默认值。
- cv::LINE_8: 表示绘制八个相邻的点的矩形边框。
- cv::LINE_AA: 表示绘制抗锯齿的矩形边框。
- shift: 可选参数,表示坐标点像素值所占用的位数,默认值为 0。
【4】绘制文本
cv::putText 函数用于在图像上绘制文本,其参数如下:
void cv::putText(InputOutputArray img, const String& text, Point org, int fontFace, double fontScale, Scalar color, int thickness = 1, int lineType = LINE_8, bool bottomLeftOrigin = false);
- img: 输入输出参数,表示待绘制的目标图像。
- text: 输入参数,表示要绘制的文本字符串。
- org: 输入参数,表示文本框左下角的坐标点,是一个 cv::Point 类型的对象。
- fontFace
- : 输入参数,表示字体类型,可以取以下几个值:
- cv::FONT_HERSHEY_COMPLEX: 复杂风格字体。
- cv::FONT_HERSHEY_COMPLEX_SMALL: 小字号复杂风格字体。
- cv::FONT_HERSHEY_DUPLEX: 双线条字体。
- cv::FONT_HERSHEY_PLAIN: 单线条字体。
- cv::FONT_HERSHEY_SIMPLEX: 正常大小的字体。
- cv::FONT_HERSHEY_TRIPLEX: 三线条字体。
- fontScale: 输入参数,表示字体大小缩放比例。
- color: 输入参数,表示绘制文本的颜色以及透明度,是一个 cv::Scalar 类型的对象。
- thickness: 可选参数,表示文本轮廓线条的宽度。默认值为 1 表示绘制一个像素宽度的文本,如果设置为负值,则表示绘制一条填充的文本。
- lineType
- : 可选参数,表示文本边界的类型,可以取以下几个值:
- cv::LINE_4: 表示绘制四个相邻的点的文本边界,默认值。
- cv::LINE_8: 表示绘制八个相邻的点的文本边界。
- cv::LINE_AA: 表示绘制抗锯齿的文本边界。
- bottomLeftOrigin: 可选参数,表示坐标点是否为文本框左下角的坐标点,默认值为 false,表示坐标点为文本框左上角的坐标点。
版权声明:
作者: freeclashnode
链接: https://www.freeclashnode.com/news/article-2157.htm
来源: FreeClashNode
文章版权归作者所有,未经允许请勿转载。
热门文章
- 10月13日|18.6M/S,V2ray/SSR/Shadowrocket/Clash免费节点订阅链接每天更新
- 10月15日|18.5M/S,V2ray/Shadowrocket/SSR/Clash免费节点订阅链接每天更新
- 10月16日|22.5M/S,Clash/V2ray/SSR/Shadowrocket免费节点订阅链接每天更新
- 10月14日|22.5M/S,V2ray/Clash/Shadowrocket/SSR免费节点订阅链接每天更新
- 10月17日|18.2M/S,Clash/SSR/V2ray/Shadowrocket免费节点订阅链接每天更新
- 11月2日|20.2M/S,Clash/Shadowrocket/V2ray/SSR免费节点订阅链接每天更新
- 10月31日|22.2M/S,V2ray/SSR/Clash/Shadowrocket免费节点订阅链接每天更新
- 10月23日|19.4M/S,Clash/SSR/Shadowrocket/V2ray免费节点订阅链接每天更新
- 10月24日|22.8M/S,SSR/V2ray/Clash/Shadowrocket免费节点订阅链接每天更新
- 11月1日|19.1M/S,SSR/Clash/Shadowrocket/V2ray免费节点订阅链接每天更新
最新文章
- 11月11日|19.4M/S,V2ray/Clash/SSR/Shadowrocket免费节点订阅链接每天更新
- 11月10日|18M/S,Shadowrocket/V2ray/SSR/Clash免费节点订阅链接每天更新
- 11月9日|21.6M/S,V2ray/Shadowrocket/Clash/SSR免费节点订阅链接每天更新
- 11月8日|20.7M/S,V2ray/Shadowrocket/SSR/Clash免费节点订阅链接每天更新
- 11月7日|18.3M/S,SSR/V2ray/Clash/Shadowrocket免费节点订阅链接每天更新
- 11月6日|19.6M/S,SSR/Shadowrocket/V2ray/Clash免费节点订阅链接每天更新
- 11月5日|19.2M/S,Clash/Shadowrocket/V2ray/SSR免费节点订阅链接每天更新
- 11月4日|19.5M/S,V2ray/Clash/SSR/Shadowrocket免费节点订阅链接每天更新
- 11月3日|18.7M/S,V2ray/Shadowrocket/Clash/SSR免费节点订阅链接每天更新
- 11月2日|20.2M/S,Clash/Shadowrocket/V2ray/SSR免费节点订阅链接每天更新