OpenCV7---绘制形状文字

2023-10-08 00:50
文章标签 文字 绘制 形状 opencv7

本文主要是介绍OpenCV7---绘制形状文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

七、绘制形状和文字
1、在图片中绘制一条线
Point表示2D平面上的一个点,可用以下两个方式定义

Point p;
p1.x = 10; p1.y = 8;//第一种
p = Point(10, 8);//第二种

画线用到函数line( );

void MyLines() {//划线函数定义Point p1 = Point(20, 30);//定义线的起始点Point p2 = Point(300, 300);//定义线的终点//p2.x = 300;//p2.y = 300;Scalar color = Scalar(0, 0, 255);//定义线的颜色line(image, p1, p2, color, 1, LINE_8);//在图片src中生成一条线,从点p1到点p2,颜色为color, 线的宽度为1,类型为LINE_8//line(src, p1, p2, color, 1, LINE_AA);//类型为LINE_AA,反锯齿类型,生成的线更平滑
}

显示效果:
在这里插入图片描述
2、绘制长方形框

绘制长方形框用到函数rectangle( );

void MyRectangle() {//画长方形框函数定义Rect rect = Rect(20, 30, 300, 300);//定义长方形框的起点(20,30),长宽分别为300和300Scalar color = Scalar(255, 0, 0);//定义长方形框的颜色rectangle(src, rect, color, 2, LINE_8);在图片src中生成一个长方形框,参数为rect,颜色为color,线宽为2,类型为LINE_8
}

显示效果:
在这里插入图片描述
3、绘制椭圆
绘制椭圆用函数ellipse( ),可以通过调节倾斜度数得到不同朝向的椭圆,可以通过调节显示范围得到弧形。

void MyEllipse() {//画椭圆函数定义Scalar color = Scalar(0, 255, 0);//定义椭圆颜色ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8);//在图片src中生成一个椭圆框,中心点为Point,长短轴参数在Size中,倾斜角度为90°,显示范围为0-360°,颜色为color,线长为2,类型为LINE_8
}

显示效果:
在这里插入图片描述
4、绘制圆形
绘制圆形用函数circle( );

void MyCircle() {//画圆函数定义Scalar color = Scalar(0, 255, 255);//定义圆的颜色Point center = Point(src.cols / 2, src.rows / 2);//定义圆的圆心circle(src, center, 150, color, 2, 8);//在图片src中生成一个圆,圆心坐标为Point,半径为150,颜色为color,线宽为2,类型为LINE_8
}

显示效果:
在这里插入图片描述
5、绘制填充图形
填充图形用函数fillPoly( );

void MyPolygon() {//填充函数定义Point pts[2][5];//声明填充范围轮廓点的坐标,为一个2维数组,第一维代表有几个填充范围,第二维代表该范围的边界点,最终应传出指向某一个填充范围的指针pts[0][0] = Point(100, 100);    pts[0][1] = Point(100, 200);pts[0][2] = Point(200, 200);pts[0][3] = Point(200, 100);pts[0][4] = Point(100, 100);pts[1][0] = Point(300, 300);pts[1][1] = Point(300, 400);pts[1][2] = Point(400, 400);pts[1][3] = Point(400, 300);pts[1][4] = Point(300, 300);const Point* ppts[] = { pts[0], pts[1] };//指向第0个轮廓的指针int npt[] = { 5, 5 };//数组中存放每一个轮廓的轮廓点数Scalar color = Scalar(255, 12, 255);//定义轮廓颜色fillPoly(src, ppts, npt, 2, color, 8);//在图片src中填充一个范围,ppts中存放着这个轮廓信息的位置,npt代表该轮廓有几个轮廓点,2代表填充的轮廓数目
}

显示效果:
在这里插入图片描述
6、打印文字
打印文字用到函数putText( );

putText(src, "Hello OpenCV", Point(100, 200), FONT_HERSHEY_COMPLEX, 1.0, Scalar(12, 255, 200), 2, 8);//在屏幕上点Point处打印文字"Hello OpenCV",字体类型为FONT_HERSHEY_COMPLEX,放缩程度为1.0,后3个参数为颜色,线宽,类型

显示效果:
在这里插入图片描述
7、生成随机线
随机数生成cv::RNG

  • 随机数生成器RNG rng(12345);
  • 生成正态分布随机数uniform(int a, int b),随机生成啊[a, b)之间的数
void RandomLineDemo() {//生成随机线函数定义RNG rng(12345);//生成高斯随机函数Point pt1;Point pt2;Mat dst = Mat::zeros(src.size(), src.type());//构造新的一张与图片src大小类型一致的黑图dstfor (int i = 0; i < 100000; i++) {//执行100000次,不断生成随机线pt1.x = rng.uniform(0, src.cols);//第1个点x坐标生成正态分布随机数0到src.cols之间pt2.x = rng.uniform(0, src.cols);pt1.y = rng.uniform(0, src.rows);pt2.y = rng.uniform(0, src.rows);Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));//随机生成颜色值if (waitKey(50) > 0) {//直到有按键按下才会结束break;}line(dst, pt1, pt2, color, 1, 8);//随机划线imshow("random line demo", dst);}
}

显示效果:
在这里插入图片描述
示例代码(绘制图片文字综合):

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;void MyLines();//划线函数声明
void MyRectangle();//画长方形框函数声明
void MyEllipse();//画椭圆函数声明
void MyCircle();//画圆函数声明
void MyPolygon();//填充函数声明
void RandomLineDemo();
Mat src;//定义一个全局的图片int main(int argc, char** argv) {src = imread("C:/Users/26839/Pictures/测试.png");if (!src.data) {cout << "could not load image...\n" << endl;return -1;}imshow("yuantupian", src);MyLines();//调用划线函数MyRectangle();//调用长方形框函数MyEllipse();//调用画椭圆函数MyCircle();//调用画圆函数MyPolygon();//调用填充函数putText(src, "Hello OpenCV", Point(100, 200), FONT_HERSHEY_COMPLEX, 1.0,       Scalar(12, 255, 200), 2, 8);//在屏幕上点Point处打印文字"Hello OpenCV",字体类型为FONT_HERSHEY_COMPLEX,放缩程度为1.0,后3个参数为颜色,线宽,类型imshow("input", src);//RandomLineDemo();//声明生成随机线函数waitKey(0);destroyAllWindows();return 0;
}void MyLines() {Point p1 = Point(20, 30);Point p2 = Point(300, 300);Scalar color = Scalar(0, 0, 255);line(src, p1, p2, color, 1, LINE_8);
}void MyRectangle() {//画长方形框函数定义Rect rect = Rect(20, 30, 300, 300);//定义长方形框的起点(20,30),长宽分别为300和300Scalar color = Scalar(255, 0, 0);//定义长方形框的颜色rectangle(src, rect, color, 2, LINE_8);在图片src中生成一个长方形框,参数为rect,颜色为color,线宽为2,类型为LINE_8
}void MyEllipse() {//画椭圆函数定义Scalar color = Scalar(0, 255, 0);//定义椭圆颜色ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8);//在图片src中生成一个椭圆框,中心点为Point,长短轴参数在Size中,倾斜角度为90°,显示范围为0-360°,颜色为color,线长为2,类型为LINE_8
}void MyCircle() {//画圆函数定义Scalar color = Scalar(0, 255, 255);//定义圆的颜色Point center = Point(src.cols / 2, src.rows / 2);//定义圆的圆心circle(src, center, 150, color, 2, 8);//在图片src中生成一个圆,圆心坐标为Point,半径为150,颜色为color,线宽为2,类型为LINE_8
}void MyPolygon() {//填充函数定义Point pts[2][5];//声明填充范围轮廓点的坐标,为一个2维数组,第一维代表有几个填充范围,第二维代表该范围的边界点,最终应传出指向某一个填充范围的指针pts[0][0] = Point(100, 100);pts[0][1] = Point(100, 200);pts[0][2] = Point(200, 200);pts[0][3] = Point(200, 100);pts[0][4] = Point(100, 100);pts[1][0] = Point(300, 300);pts[1][1] = Point(300, 400);pts[1][2] = Point(400, 400);pts[1][3] = Point(400, 300);pts[1][4] = Point(300, 300);const Point* ppts[] = { pts[0], pts[1] };//指向第0个轮廓的指针int npt[] = { 5, 5 };//数组中存放每一个轮廓的轮廓点数Scalar color = Scalar(255, 12, 255);//定义轮廓颜色fillPoly(src, ppts, npt, 2, color, 8);//在图片src中填充一个范围,ppts中存放着这个轮廓信息的位置,npt代表该轮廓有几个轮廓点,2代表填充的轮廓数目
}

输出结果如下:
在这里插入图片描述

这篇关于OpenCV7---绘制形状文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161574

相关文章

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

Winfrom中解决图像、文字模糊的方法

1.添加清单 2.将清单中的下面内容取消注释

【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程酒吧一群美女车展模特大屏幕视频改字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

ORA-01861:文字与格式字符串不匹配

select t.*, t.rowid from log_jk_dtl t; insert into log_jk_dtl (rq,zy,kssj,jssj,memo)  values (to_date(sysdate,'yyyy-mm-dd'),'插入供应商', to_char(sysdate,'hh24:mi:ss'),to_char(sysdate,'hh24:mi:ss'),'备注'

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大