设为首页收藏本站 |天气与日历| 2025-08-23 星期六 07:10:00 乙巳(蛇)年 七月初一 辰时 处暑
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 188|回复: 0

绘制形状与文字

[复制链接]

954

主题

954

帖子

3879

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3879
发表于 2022-2-21 22:55:16 | 显示全部楼层 |阅读模式
绘制形状与文字
使用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

[C++] 纯文本查看 复制代码
/*
注意:
LINE_8
反锯齿LINE_AA 会消耗资源,但是视觉效果好
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

void MyLines(); //画线函数声明
void MyRectangle();//画矩形
void MyEllopse(); //画椭圆
void MuyCircle();//画圆
void MyPolygon();//填充多边形
void RandLine();//随机画线
Mat src, dst;
int main(int argc, char** argv) {
	
	src = imread("D:/IDE/opencv-3.1.0/demo.jpg");
	if (!src.data) {
		printf("加载图片异常\n");
		return -1;
	}

	MyLines();
	MyRectangle();
	MyEllopse();
	MuyCircle();
	MyPolygon();
	putText(src, "hellow opencv", Point(200, 200), CV_FONT_HERSHEY_COMPLEX, 0.8, Scalar(12, 80, 255), 3, LINE_AA);
	//RandLine();
/*绘制文字:::中文会乱码 解决参考方案 百度搜索
方案推荐:::[url]https://blog.csdn.net/hk121/article/details/80612797[/url]
*/
	RandLine();
	
	//namedWindow("input", CV_WINDOW_AUTOSIZE);
	imshow("input", src);

	
	
	

	waitKey(0);
	return 0;
}	
void MyLines() {
	Point p1 = Point(20,30);
	Point p2;
	p2.x = 300;
	p2.y = 300;
	Scalar color = Scalar(0, 0, 255);
	line(src, p1, p2, color, 1, LINE_8);

}//画线
void MyRectangle() {
	Rect rect=Rect(200,100,50,60);
	//起始位置:宽210,高100. 矩形 的宽50,高60
	Scalar color = Scalar(255, 0, 0);
	//定义颜色
	rectangle(src,rect,color,2,LINE_8);
	//画矩形

}//画矩形
void MyEllopse() {
	Scalar color = Scalar(255,0,0);
	ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360,color,2,LINE_8);
	//Point(src.cols / 2, src.rows / 2) :::圆的中心点
	//Size(src.cols / 4, src.rows / 8) ::: 宽半径,高半径
	//90 角度
	// 0,360 从0度 画到360 度
 	//color颜色
	//2线宽度
	//LINE_8 线条效果

}//画椭圆
void MuyCircle() {
	Scalar color = Scalar(0, 255, 0);
	Point center = Point(src.cols / 2, src.rows / 2);
	//设置圆心点
	circle(src, center, 150, color, 3, LINE_AA);
	//150为半径

}//画圆
void MyPolygon() {
	Point pts[1][5];
	pts[0][0] = Point(30, 60);
	pts[0][1] = Point(30, 150);
	pts[0][2] = Point(70, 150);
	pts[0][3] = Point(70, 100);
	pts[0][4] = Point(30, 60);
	const Point* ppts[] = { pts[0] };
	int npt[] = { 5 };
	Scalar color = Scalar(255, 255, 70);
	fillPoly(src,ppts, npt, 1, color, LINE_8);
}//填充多边形
void RandLine() {
	RNG rng(12345);
	//设置随机数种子
	Point p1;
	Point p2;
	for (int i = 0; i < 1000; i++)
	{
		p1.x = rng.uniform(0, src.cols);
		p2.x = rng.uniform(0, src.cols);
		p1.y = rng.uniform(0, src.rows);
		p2.y = rng.uniform(0, src.rows);
		//uniform(0, src.cols); 限定x取值范围 0-src.rows,y取值范围0, src.cols
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		//生成随机颜色
		if (waitKey(50) > 0) {
			break;
		}
		line(src, p1, p2, color, 1, 8);
		imshow("input", src);
	}


}//随机画随机彩色线条



9.jpg


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-8-23 07:10 , Processed in 0.090144 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表