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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.