OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字

2024-04-30 02:48

本文主要是介绍OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


/*
txwtech2021.3.28OpenCV08
绘制形状与文字
使用cv::Point与cv::Scalar
绘制线、矩形、圆、椭圆等基本几何形状
随机生成与绘制文本
Point表示2D平面上一个点x,y
Point p;
p.x = 10;
p.y = 8;
or
p = Pont(10,8);
Scalar表示四个元素的向量
Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道

绘制线、矩形、园、椭圆等基本几何形状
画线 cv::line (LINE_4\LINE_8\LINE_AA-反锯齿)
画椭圆cv::ellipse
画矩形cv::rectangle
画圆cv::circle
画填充cv::fillPoly

填充矩形
可以通过多边形填充来填充矩形

随机数生成cv::RNG
生成高斯随机数gaussian (double sigma)
生成正态分布随机数uniform (int a, int b)

绘制添加文字
putText函数 中设置fontFace(cv::HersheyFonts),
- fontFace, CV_FONT_HERSHEY_PLAIN
- fontScale , 1.0, 2.0~ 8.0


*/


/*
txwtech2021.3.28OpenCV08
绘制形状与文字
使用cv::Point与cv::Scalar
绘制线、矩形、园、椭圆等基本几何形状
随机生成与绘制文本
Point表示2D平面上一个点x,y
Point p;
p.x = 10;
p.y = 8;
or
p = Pont(10,8);
Scalar表示四个元素的向量
Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道绘制线、矩形、园、椭圆等基本几何形状
画线 cv::line (LINE_4\LINE_8\LINE_AA-反锯齿)
画椭圆cv::ellipse
画矩形cv::rectangle
画圆cv::circle
画填充cv::fillPoly填充矩形
可以通过多边形填充来填充矩形随机数生成cv::RNG
生成高斯随机数gaussian (double sigma)
生成正态分布随机数uniform (int a, int b)绘制添加文字
putText函数 中设置fontFace(cv::HersheyFonts),
- fontFace, CV_FONT_HERSHEY_PLAIN
- fontScale , 1.0, 2.0~ 8.0*/
#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;Mat src_bgImg;
const char *draw_window = "shape and text show";
void DrawLine();
void DrawRectangle();
void DrawEllipse();//绘制椭圆
void DrawCircle();
void DrawPolygon();//多边形
void DrawRandomLine();//画随机线int main(int argc, char *argv[])
{src_bgImg = imread("E:\\pictures\\test1.jpg");if (!src_bgImg.data){printf("failed to load imgs");return -1;}DrawLine();DrawRectangle();DrawEllipse();DrawCircle();DrawPolygon();putText(src_bgImg,"hi OpenCV",Point(200,200),CV_FONT_HERSHEY_COMPLEX,1.0,Scalar(255,255,0),1,8);//绘制添加文字namedWindow(draw_window,CV_WINDOW_AUTOSIZE);imshow(draw_window,src_bgImg);DrawRandomLine();waitKey(0);return 0;
}
void DrawLine()
{Point p1 = Point(100, 50);//也可以这样写//p1.x = 30;//p1.y = 50;Point p2 = Point(100,500);Scalar color = Scalar(255,0,255);line(src_bgImg,p1,p2,color,2,LINE_8);//划一根竖线,2表示线的粗细}
//画矩形
void DrawRectangle()
{Rect rect = Rect(150,20,100,100);Scalar color = Scalar(255, 0, 255);rectangle(src_bgImg,rect,color,3,LINE_8);
}
void DrawEllipse()
{//(背景图像,椭圆的中心,椭圆的半径,角度,0,360,颜色,粗细,line的类型)//0:开始度数,360:结束的度数,也可以0-180,画成弧形,0-100度位置。等等Scalar color = Scalar(255, 0, 255);ellipse(src_bgImg,Point(src_bgImg.cols/2,src_bgImg.rows/2),Size(src_bgImg.cols/4,src_bgImg.rows/8),90,0,360,color,2,LINE_8);
}
void DrawCircle()
{Scalar color = Scalar(0, 255, 0);//定义圆形坐标Point center = Point(src_bgImg.cols/2,src_bgImg.rows/2);circle(src_bgImg,center,80,color,2,LINE_8);}
void DrawPolygon()
{Scalar color = Scalar(0, 255, 0);Point pts[1][5];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);const Point *ppts[] = {pts[0]};int npt[] = {5};fillPoly(src_bgImg,ppts,npt,1,color,8);//line_8也可以直接写成8
}
void DrawRandomLine()//画随机线
{RNG rng(12345);Point pt1;Point pt2;Mat bg_imgs = Mat::zeros(src_bgImg.size(),src_bgImg.type());namedWindow("randow_window",CV_WINDOW_AUTOSIZE);for (int i = 0; i < 20000; i++){pt1.x = rng.uniform(0, src_bgImg.cols);pt2.x = rng.uniform(0, src_bgImg.cols);pt1.y = rng.uniform(0, src_bgImg.cols);pt2.y = rng.uniform(0, src_bgImg.cols);Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));if (waitKey(50) > 0){break;}line(bg_imgs, pt1, pt2, color, 1, 8);imshow("randow_window", bg_imgs);}
}

 

这篇关于OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

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

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

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

【WebGPU Unleashed】1.1 绘制三角形

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

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

Flutter 进阶:绘制加载动画

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

poj 3304 几何

题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!。 解题思路:如果存在这样的直线,过投影相交点(或投影相交区域中的点)作直线的垂线,该垂线(也是直线)必定与每条线段相交,问题转化为问是否存在一条直线和所有线段相交。 若存在一条直线与所有线段相交,此时该直线必定经过这些线段的某两个端点,所以枚举任意两个端点即可。