OpenCV学习之绘制形状和文字

这篇博客介绍了如何使用OpenCV库在C++中绘制各种基本几何形状,包括线、矩形、椭圆、圆以及填充多边形,并展示了如何随机生成和绘制文本。通过示例代码,详细讲解了各个函数的用法,如line()、rectangle()、ellipse()、circle()和fillPoly(),以及如何设置颜色和线条类型。此外,还提供了一个随机线段生成的动态演示,用于展示颜色和形状的随机性。
摘要由CSDN通过智能技术生成

绘制形状和文字

  • 使用从cv::Point与cv::Scalar
  • 绘制线、矩形、圆、椭圆等基本几何形状
  • 随机生成与绘制文本

使用cv::Point与cv::Scalar

  • Point表示2D平面上一个点x,y

Point p;
p.x = 10;
p.y = 8;
or
p = Point(10,8);

  • Scalar表示四个元素的向量
    Scalar(a,b,c);//a = blue,b = green,c = red表示RGB三个通道

绘制线、矩形、圆、椭圆等基本几何形状

  • 画线cv::line(LINE_4\LINE_8\LINE_AA) //AA代表反锯齿
  • 画椭圆cv::ellipse
  • 画矩形cv::rectangle
  • 画填充cv::fillPoly
  • 画圆cv::circle

代码演示

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

//定义全局
Mat bgImage;
const char* drawdemo_win = "draw shapes and text demo";
//画线段
void MyLines();
//画矩形
void MyRectangle();
//画椭圆
void MyEllipse();
//画圆
void MyCircle();
//画多边形
void MyPolygon();
//随机线段随机颜色
void RandomLineDemo();
int main(int argc,char* argv)
{
	bgImage = imread("C:/Users/26444/Desktop/testopencvinstall/OIP.jpg");
	if(bgImage.empty())
	{
		cout << "could not load image....."<< endl;
		return -1;
	}
	//画线段
	MyLines();
	//画矩形
	MyRectangle();
	//画椭圆
	MyEllipse();
	//画圆
	MyCircle();
	//画多边形
	MyPolygon();
	putText(bgImage,"Hello Opencv",Point(((bgImage.cols/2)/2),(bgImage.rows/2)),FONT_HERSHEY_COMPLEX,1.0,Scalar(12,255,200),1,LINE_8);
	namedWindow("drawdemo_win",WINDOW_AUTOSIZE);
	imshow("RandomLine",bgImage);
	waitKey(0);
	return 0;
}
void MyLine()
{
	Point p1 = Point(20,30);
	Point p2;
	p2.x = 150;
	p2.y = 150;
	Scalar color = Scalar(0,0,255);
	line(bgImage,p1,p2,color,1,LINE_8);
}
void MyRectangle()
{
	Rect rect = Rect(200,200,200,200);
	Scalar color = Scalar(255,0,0);
	rectangle(bgImage,rect,color,1,LINE_8);
}
void MyEllipse()
{
	Scalar color = Scalar(0,255,0);
	ellipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,LINE_8);
}
void MyCircle()
{
	Scalar color = Scalar(0,255,255);
	Point center = Point(bgImage.cols/2,bgImage.rows/2);
	circle(bgImage,center,150,color,2,LINE_8);
}
void MyPolygon()
{
	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};
	Scalar color = Scalar(255,12,255);
	fillPoly(bgImage,ppts,npt,1,color,LINE_8);
}

void RandomLineDemo()
{
	RNG rng(12345);
	Point pt1;
	Point pt2;
	Mat bg = Mat::zeros(bgImage.size(),bgImage.type());
	namedWindow("random line demo",WINDOW_AUTOSIZE);
	for(int 1 = 0;i < 100000;1++)
	{
		pt1.x = rng.uniform(0,bgImage.cols);
		pt2.x = rng.uniform(0,bgImage.cols);
		pt1.y = rng.uniform(0,bgImage.rows);
		pt2.y = rng.uniform(0,bgImage.rows);
		Scalar color = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));
		if(waitKey(50) > 0)
		{
			break;
		}
		line(bg,pt1,pt2,color,1,LINE_8);
		imshow("random line demo",bg);
	}
}

图片演示
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值