在利用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);