几何形状绘制

这篇博客介绍了如何使用OpenCV进行几何形状的绘制,包括矩形、圆、椭圆和线的绘制,并详细讲解了如何利用RNG生成随机点来绘制多边形,使用fillPoly()进行填充,polylines()画线以及drawContours()函数来绘制多边形轮廓。示例代码展示了具体实现过程。

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

目录

1.几何形状

2.多边形绘制

1.RNG 随机生成多边形的点

 2.cv::fillpoly() 填充

3.cv::polylines() 画线 

 4.cv::drawContours()也可绘制多边形


矩形cv::rectangle()
cv::circle()
椭圆cv::ellipse()
线cv::line()
随机数cv::RNG
多边形cv::fillpoly()  cv::polylines()
画出轮廓cv::drawContours()

1.几何形状

仔细看API就能懂~

#include<opencv2/opencv.hpp>
#include<iostream>
#include<imgproc.hpp>
using namespace cv;
using namespace std;


int main(int argc, char** argv) {
	Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/frose.jpg");
	//imshow("原图", image);
	Mat src = Mat::zeros(512, 512, CV_8UC3);
	//矩形
	Rect rec1,rec2;
	rec1.x = 100;
	rec1.y = 100;
	rec1.width = 100;
	rec1.height = 50;
	rec2.x = 300;
	rec2.y = 100;
	rec2.width = 100;
	rec2.height = 50;
	rectangle(src, rec1, Scalar(255, 0, 0), -1);
	rectangle(src, rec2, Scalar(255, 0, 0), -1);
	//圆
	circle(src, Point(250, 250), 20, Scalar(0, 255, 255), -1);
	//椭圆
	RotatedRect box;
	box.center = Point(250, 400);
	box.size = Size(200, 90);
	box.angle = 0.0;
	ellipse(src, box, Scalar(0, 0, 255), -1);

	imshow("结果", src);

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

2.多边形绘制

1.RNG 随机生成多边形的点

详情:随机数RNG使用说明

C++ class cv::RNG

 2.cv::fillpoly() 填充

C++ void cv::fillPoly(cv::InputOutputArray img, 输入图像,在上面绘制并输出
                      cv::InputArrayOfArrays pts, 多边形的点
                      const cv::Scalar &color, 填充颜色
                      int lineType = 8, 
                      int shift = 0, 
                      cv::Point offset = cv::Point())

3.cv::polylines() 画线 

C++ void cv::polylines(cv::InputOutputArray img, 输入
                       cv::InputArrayOfArrays pts, 多边形的点
                       bool isClosed, 是否闭合
                       const cv::Scalar &color,颜色 
                       int thickness = 1, 不能取-1,不能直接使用-1取填充
                       int lineType = 8, 
                       int shift = 0)

 4.cv::drawContours()也可绘制多边形

#include<opencv2/opencv.hpp>
#include<iostream>
#include<imgproc.hpp>
using namespace cv;
using namespace std;


int main(int argc, char** argv) {
	Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/frose.jpg");
	//imshow("原图", image);
	Mat src = Mat::zeros(512, 512, CV_8UC3);
	RNG rng;

	vector<Point>pts;
	int num = 10;
	for (int i = 0; i < num; i++) {
		Point x = Point(rng.uniform(0, src.rows), rng.uniform(0, src.cols));
		pts.push_back(x);
	}

	fillPoly(src, pts, Scalar(0, 255, 255));//填充
	polylines(src, pts, pts.size(), Scalar(0, 255, 0), 2, 8);//线段
    
	/*利用drawContours绘制多边形
    vector<vector<Point>> contours;
	contours.push_back(pts);
	drawContours(src, contours, -1, Scalar(255, 0, 255), -1);
    */
	imshow("图", src);
	

	waitKey(0);
	destroyAllWindows();
	return 0;
}
画线+填充
drawContours

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值