OpenCV 绘图功能

2022-05-07 09:21:58 浏览数 (1)

在利用Opencv处理图像时,我们常常需要利用一些绘图操作用来验证中间结果是否正确,比如画圆,画椭圆,画线,画矩形等功能。下面对常用的绘图函数做个整理,也方便以后自己使用:

在说明绘图功能之前,首先介绍绘图时常常用到了两个结构 Point 和 Scalar。

Point数据结构表示了由其图像坐标 x 和 y 指定的2D点。可定义为:

代码语言:javascript复制
Point pt;
pt.x = 10;
pt.y = 8;

或者

代码语言:javascript复制
Point pt =  Point(10, 8);

Scalar表示了具有4个元素的数组。此类型在OpenCV中被大量用于传递像素值。 它利用最多的是用来表示RGB颜色值(三个参数)。如果用不到第四个参数,则无需定义。颜色参数表达式:

代码语言:javascript复制
Scalar( i, j, k )

值得注意的是,Scalar表示颜色的顺序并不是RGB,而是BGR,分别代表蓝,绿,红。

绘图函数

画直线line函数,函数原型:

代码语言:javascript复制
CV_EXPORTS_W void line(
CV_IN_OUT Mat& img, 
Point pt1, 
Point pt2, 
const Scalar& color,
int thickness=1,
int lineType=8, 
int shift=0);

第一个参数:目标图像 第二个参数:起点 第三个参数:终点 第四个参数:线的颜色 第五个参数:线的粗细 第六个参数:线的类型

代码语言:javascript复制
	Mat srcimage = imread("1.jpg");
	Point a = Point (0,0);  
	Point b = Point (srcimage.cols,srcimage.rows);  
	line(srcimage,a,b,Scalar(255,0,0));  
	imshow("原图",srcimage);
	waitKey(0);

画圆circle函数,函数原型:

代码语言:javascript复制
CV_EXPORTS_W void circle(
 CV_IN_OUT Mat& img,
 Point center,
 int radius,
 const Scalar& color, 
 int thickness=1,
 int lineType=8,
 int shift=0);

第一个参数:目标图像 第二个参数:圆心 第三个参数:半径 第四个参数:线的颜色 第五个参数:线的粗细 第六个参数:线的类型 第七个参数:圆心坐标点和半径值的小数点位数

代码语言:javascript复制
	Mat srcimage = imread("1.jpg");
	Point center = Point(55,55);  
	int r = 10;  
	circle(srcimage,center,r,Scalar(0,0,255),-1);  
	imshow("原图",srcimage);
	waitKey(0);

画椭圆ellipse函数,函数原型:

代码语言:javascript复制
CV_EXPORTS_W void ellipse(
CV_IN_OUT Mat& img,
Point center, 
Size axes,
double angle, 
double startAngle, 
double endAngle,
const Scalar& color, 
int thickness=1,
int lineType=8, 
int shift=0);

第一个参数:目标图像 第二个参数:圆心 第三个参数:长短轴 第四个参数:径向夹角(水平面到长轴的夹角) 第五个参数:起始角度(长轴到起始边沿的夹角) 第六个参数:结束角度(长轴到结束点的夹角) 第七个参数:线的颜色 第八个参数:线的粗细 第九个参数:线的类型 第十个参数:圆心坐标点和半径值的小数点位数

代码语言:javascript复制
Mat srcimage = imread("1.jpg");
Point center = Point(55,55);  
ellipse(srcimage,center,Size( 50, 10 ),0,0,360,Scalar(0,255,0));  
imshow("原图",srcimage);
waitKey(0);

画矩形rectangle函数,函数原型:

代码语言:javascript复制
CV_EXPORTS_W void rectangle(
CV_IN_OUT Mat& img,
Point pt1, 
Point pt2,
const Scalar& color, 
int thickness=1,
int lineType=8, 
int shift=0);

第一个参数:目标图像 第二个参数:左上角点 第三个参数:右下角点 第四个参数:线的颜色 第五个参数:线的粗细 第六个参数:线的类型 第七个参数:圆心坐标点和半径值的小数点位数

代码语言:javascript复制
	Mat srcimage = imread("1.jpg");
	Point a = Point(5,5);  
	Point b = Point(55,55);  
	rectangle(srcimage,a,b,Scalar(255,0,0));  
	imshow("原图",srcimage);
	waitKey(0);

插入文字 putText函数 ,函数原型:

代码语言:javascript复制
CV_EXPORTS_W void putText(
Mat& img, 
const string& text, 
Point org,
int fontFace, 
double fontScale, 
Scalar color,
int thickness=1, 
int lineType=8,
bool bottomLeftOrigin=false );

第一个参数:目标图像 第二个参数:插入文字 第三个参数:文字位置 第四个参数:字体 第五个参数:大小 第六个参数:颜色

代码语言:javascript复制
Mat srcimage = imread("1.jpg");
string words= "chaibubble";  
putText( srcimage, words, Point( srcimage.rows/2,srcimage.cols/4),CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 255, 0) );  
imshow("原图",srcimage);
waitKey(0);

0 人点赞