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);
}
喜欢点个关注吧,今天就先到这里啦。
上一篇: Python Opencv显示中文
下一篇: 判断年月日