opencv c++ (4):图型绘制

本文介绍了使用OpenCV库在C++中进行图形绘制的基本操作,包括线、矩形、椭圆的绘制方法,以及如何利用随机数生成器(RNG)实现随机线段绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 图形绘制

以下是几个绘制图形的api,细节不多说。值得注意的是指定线宽时候-1代表填充。

#include <iostream>
#include<opencv.hpp>
#include<opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;
int main()
{
	Mat canvas = Mat::zeros(Size(512,512),CV_8UC3);

	//绘制
	//1. 线
	line(canvas, Point(10, 10), Point(400, 400), Scalar(0, 0, 255), 2, LINE_8);
	//2. 矩形
	Rect rect(100, 100, 200, 200);
	rectangle(canvas, rect,Scalar(255,0,0),2,8);
	//3. 圆
	circle(canvas, Point(256,256),100,Scalar(0,255,0),1,8);
	//4. 椭圆
	RotatedRect rrt;
	rrt.center = Point2f(256,256);
	rrt.angle = 45; //旋转45°
	rrt.size = Size(100,200);
	ellipse(canvas, rrt, Scalar(0, 100, 100), -1, 8);
	imshow("canvas", canvas);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

2. 随机RNG

以下代码是在画布上随机画线段,这个看一下代码就懂。需要注意的是:指定退出键为esc,waitKey返回值为27代表按下的是esc,其他值可以看一下api中介绍,这里不详细说。

	Mat image = Mat::zeros(Size(512, 512), CV_8UC3);
	//rgn 种子初始化
	RNG rng(12345);
	//坐标
	int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
	//颜色
	Scalar color = (0, 0, 0);
	while (1){

		x1 = (int)rng.uniform(0, 512);
		y1 = (int)rng.uniform(0, 512);
		x2 = (int)rng.uniform(0, 512);
		y2 = (int)rng.uniform(0, 512);

		color = Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256));

		line(image, Point(x1, y1), Point(x2, y2), color, 1, 8);
		imshow("image", image);
		char c = waitKey(10);
		if (c == 27)
		{
			break;
		}

	}

API 参数说明

cv::line

  • 参数说明:

    • img:要绘制线条的图像。
    • pt1:线条的起始点坐标。
    • pt2:线条的终点坐标。
    • color:线条的颜色。
    • thickness:线条的粗细。
    • lineType:线条的类型,默认为8连接线。
    • shift:坐标点的小数位数,通常为0。
  • 使用示例:

    cv::Mat img = cv::imread("image.jpg");
    cv::line(img, cv::Point(10, 10), cv::Point(100, 100), cv::Scalar(255, 0, 0), 2);
    

cv::rectangle

  • 参数说明:

    • img:要绘制矩形的图像。
    • pt1:矩形的左上角坐标。
    • pt2:矩形的右下角坐标。
    • color:矩形的颜色。
    • thickness:矩形边框的粗细。
    • lineType:线条的类型,默认为8连接线。
    • shift:坐标点的小数位数,通常为0。
  • 使用示例:

    cv::Mat img = cv::imread("image.jpg");
    cv::rectangle(img, cv::Point(10, 10), cv::Point(100, 100), cv::Scalar(0, 255, 0), 2);
    

cv::ellipse

  • 参数说明:

    • img:要绘制椭圆的图像。
    • center:椭圆的中心坐标。
    • axes:椭圆的长轴和短轴长度。
    • angle:椭圆的旋转角度。
    • startAngle:椭圆的起始角度。
    • endAngle:椭圆的结束角度。
    • color:椭圆的颜色。
    • thickness:椭圆边框的粗细。
    • lineType:线条的类型,默认为8连接线。
    • shift:坐标点的小数位数,通常为0。
  • 使用示例:

    cv::Mat img = cv::imread("image.jpg");
    cv::ellipse(img, cv::Point(50, 50), cv::Size(30, 20), 45, 0, 360, cv::Scalar(0, 0, 255), 2);
    

这些函数可以用于在图像上绘制线条、矩形和椭圆,通过调整参数可以实现不同颜色、粗细和形状的绘制效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

idealmu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值