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

相关文章

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python