【OpenCV】图形绘制与填充

介绍了绘制、填充图像的API。也介绍了RNG类用来生成随机数。相关API:

  • line()

  • rectangle()

  • circle()

  • ellipse()

  • putText()

代码:

cpp 复制代码
#include "iostream"
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int argc, char *argv)
{
	//【画布(图片)、窗口创建】
	Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
	namedWindow("canvas", WINDOW_AUTOSIZE);

	//【相关绘制API]】
	//线段
	line(canvas, Point(10, 10), Point(400, 400), Scalar(0, 255, 255), 1, LINE_8);	//API(画布,点,点,色彩,线粗,渲染方式),渲染方式是枚举值,LINE_AA可以实现抗锯齿效果。
	//矩形
	Rect rect(100, 100, 200, 200);	//(起始点位置,宽高)宽高不可为负值
	rectangle(canvas, rect, Scalar(255, 0, 0), 1, LINE_8);	//API
	//圆形
	circle(canvas, Point(256, 256), 100, Scalar(0, 255, 0), 1, 8);	//API(画布,圆心,半径,色彩,线粗,渲染方式)
	//椭圆
	RotatedRect rrt;	//通过这个对象设置一些矩形数据
	rrt.center = Point2f(256, 256);	//椭圆中心
	rrt.angle = 45;	//旋转角度,可以为负值,反向旋转
	rrt.size = Size(100, 200);	//椭圆尺幅,可以理解为把椭圆圈起来的矩形的大小
	ellipse(canvas, rrt, Scalar(0, 255, 255), -1, 8);	//API(画布,RotatedRect对象,色彩,线粗,渲染方式),线粗参数设置-1图形变填充。
	//文字
	putText(canvas, "hello,world", Point(100, 50), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 255, 0), 2, 8);	//API(画布,文字,起始点,字体,大小,色彩,粗细,渲染方式)
    
	imshow("canvas", canvas);

	//【随机绘制】
	/*
	Mat image = Mat::zeros(Size(512, 512), CV_8UC3);
	Rect rect1;	
	int x1 = 0, y1 = 0;
	int x2 = 0, y2 = 0;
	RNG rng(12345);	//随机数,参数是设置的种子。
	while (true)
	{
		//把image转变为纯黑图,相当于每次绘制前清空image图片。可以去掉注释运行看看效果。
		//image = Scalar(0, 0, 0);

		//两个点的x,y取随机值
		x1 = rng.uniform(0, 512);//0~511的范围随机,[0,512)
		y1 = rng.uniform(0, 512);
		x2 = rng.uniform(0, 512);
		y2 = rng.uniform(0, 512);

		//取两点间宽高
		int w = abs(x2 - x1);	//取绝对值
		int h = abs(y2 - y1);

		//画线
		line(image, Point(x1, y1), Point(x2, y2), Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)), 1, LINE_8);

		//画矩形
		rect1.x = x1;
		rect1.y = y1;
		rect1.width = w;
		rect1.height = h;
		rectangle(image, rect1, Scalar(255, 0, 0), 1, LINE_8);

		imshow("image", image);

		//按下任意键(英文输入法)退出循环,停止随机绘制
		if (waitKey(10) >= 0)
		{
			break;
		}
	}
	*/

	waitKey(0);
	destroyAllWindows();
	return 0;
}

除了几个API的使用要了解,还要了解这段代码中用到的各种类对象相关内容。

  • Rect

  • RotatedRect

  • RNG

  • .uniform(),[x,y)

这里分别用于了矩阵,椭圆的绘制,以及获取随机数。

演示:

相关推荐
大模型码小白3 分钟前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
数智化管理手记14 分钟前
预算控制手工核对效率低?预算控制数字化落地实操如何做?
大数据·网络·数据库·人工智能·数据挖掘
审小匠OpenCPAi22 分钟前
审计风险识别的工程落地:规则引擎、评分卡、机器学习与图神经网络对比
人工智能·神经网络·机器学习
AI多Agent协作实战派24 分钟前
AI多Agent协作系统实战(二十二):从6列到12列——任务监控报告的进化之路
java·人工智能·uni-app·bug
FriendshipT24 分钟前
Ultralytics:解读Proto模块
人工智能·pytorch·python·深度学习·目标检测
AI小白Lin34 分钟前
Agent Harness 越堆越烂?600 次实验推翻"自进化",个人场景下更适合"自驯化"
人工智能·架构
ViperL134 分钟前
[智能算法]NASSFG-显著特征指导的医学目标检测NAS
人工智能·目标检测·计算机视觉
ShallWeL36 分钟前
Orin 上 USB / CSI 相机采集踩坑
人工智能·嵌入式硬件·智能硬件·agi
武子康37 分钟前
Pi vs Claude Code vs Codex 正确读法:6 组同模型匹配 + 2.08×/1.46×/1.20×/1.54×/1.22×/1.44× 成
人工智能·ai编程·claude
renhongxia137 分钟前
AI安全保卫战:我们如何防止“失控”的智能体?
人工智能·深度学习·安全·机器学习·架构·机器人