欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Opencv基础入门笔记07

程序员文章站 2022-05-27 16:31:50
...

Opencv基础入门笔记07:绘制形状与文字

内容简介:在图片上面画圆,椭圆,直线,矩形及文字。

1.相关函数
画圆:
circle
函数声明

 void circle(InputOutputArray img,  Point center,  int radius,  const Scalar& color,   int thickness = 1,   int lineType = LINE_8,  int shift = 0);
 参数:
 1.目标图片
 2.圆心
 3.半径
 4.颜色
 5.画线厚度
 6.线形状
 7.圆心坐标点和半径值的小数点位数。

画椭圆:
ellipse
函数声明

void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle,  const Scalar& color, int thickness = 1,   int lineType = LINE_8, int shift = 0);
1.目标图片
2.焦点
3.a的值
4.画的椭圆的旋转角度
5.开始角度
6.结束角度(整个椭圆相对坐标轴角度的控制)
7.颜色

多边形的填充:
fillPolly
函数声明

fillPoly(img,ppt,npt,1,Scalar(255,255,255),lineType);

函数参数:

   1、目标img

   2、多边形的顶点集合

   3、绘制的多边形顶点数目

   4、要绘制的多边形数量

   5、多边形的颜色定义为Scarlar(255,255,255),即RGB的值为白色
   6、画线的类形

画矩形:
rectangle
函数声明

void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
                  int thickness=1, int line_type=8, int shift=0 );
                  参数:
                  1.目标图片
                  2.矩形一个顶点
                  3.矩形对角线上的点
                  4.线的颜色
                  5.线大小
                  6.线形状
                  			

画线:
line
函数声明

line(src, point1, point2, Scalar(0, 0, 255), int thickness=1, int line_type = LINE_8);
1.目标图片
2.线的起点
3.线的终点
4.线颜色
5.线的大小
6.线的形状

写文字:
putText
函数声明

void cv::putText(
		cv::Mat& img, // 待绘制的图像
		const string& text, // 待绘制的文字
		cv::Point origin, // 文本框的左下角
		int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)
		double fontScale, // 尺寸因子,值越大文字越大
		cv::Scalar color, // 线条的颜色(RGB)
		int thickness = 1, // 线条宽度
		int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
		bool bottomLeftOrigin = false // true='origin at lower left'

代码演示
1.画圆(这里不要演示)
2.画椭圆
3.多边形填充
4.画矩形
5.画线
6.描绘文字

// Opencv 文件.cpp :
#include "pch.h"
#include<opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//描绘几何形状及文字
void myline(Mat src);
void myellipse(Mat src);
void myrectangle(Mat src);
void myfillPolly(Mat src);
int main()
{
	Mat src1 = imread("E:\\360downloads\\wpcache\\360wallpaper.jpg");

	if (!src1.data) {//!src.data与src.empty()一样;
		printf("failure to load the image1 ");
		return -1;
	}
	//namedWindow("brightness image", WINDOW_AUTOSIZE);//WINDOW_AUTOSIZE=1;
	resize(src1, src1, Size(800, 800));
	myline(src1);
	myellipse(src1);
	myrectangle(src1);
	myfillPolly(src1);
	waitKey(0);
	return 0;
}
void myline(Mat src) {
	Point p1 = Point(200, 200);
	Point p2 = Point(600, 200);
	Point p3 = Point(200, 600);
	Point p4 = Point(600, 600);
	line(src, p1, p2, Scalar(0, 0, 255), 2, LINE_8);
	line(src, p3, p4, Scalar(0, 255, 0), 2, LINE_8);
	imshow("src1_line", src);
	//waitKey(0);
}
void myellipse(Mat src) {
	//Point center = Point(src.rows / 2, src.cols / 2);
	Scalar color = Scalar(0, 255, 0);
	ellipse(src, Point(400,300), Size(400, 400), 90, 0, 360, color, 1, 8);//椭圆必须Size里面不能a<b;

	imshow("eclipse", src);

}
void myrectangle(Mat src) {
	resize(src, src, Size(800, 800));
	Rect rect(150, 150, 500, 500);
	Scalar color = Scalar(255, 122, 0);
	rectangle(src, rect, color, 2, 8);
	putText(src, "hello", Point(src.rows / 2, src.cols / 2), FONT_HERSHEY_SCRIPT_COMPLEX, 6.0, Scalar(0, 255, 0), 3, 8);
	imshow("ractangle", src);
}
void myfillPolly(Mat src) {
	Point pt[1][4];//回忆一下数组的定义;
	pt[0][0] = Point(200,200);
	pt[0][1] = Point(200,600);
	pt[0][2] = Point(600, 200);
	pt[0][3] = Point(600,600);//加Point;同时点的位置一定得不同
	Scalar color = Scalar(232, 9, 44);
	//定义一个点类型的指针数组,访问这些点;
	const Point * pts[] = { pt[0] };//关键
	//定义一个长度
	int npt[] = { 4 };

	fillPoly(src, pts, npt, 1, color);//对应的参数设置不对会报错
	putText(src, "hello", Point(src.rows / 2, src.cols / 2), FONT_HERSHEY_SCRIPT_COMPLEX, 6.0, Scalar(0, 255, 0),3,8);
	imshow("fillPoly", src);
}

Opencv基础入门笔记07
Opencv基础入门笔记07
Opencv基础入门笔记07
Opencv基础入门笔记07
喜欢点个关注吧,今天就先到这里啦。