本文主要内容:
一、介绍OpenCV中三个绘图函数:circle() 、ellipse() 、rectangle()。
1.Circle
绘制圆形。
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
img :图像。
center :圆心坐标。
radius : 圆形的半径。
color : 线条的颜色。
thickness : 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
line_type ; 线条的类型。见 cvLine 的描述
shift ; 圆心坐标点和半径值的小数点位数。
函数cvCircle绘制或填充一个给定圆心和半径的圆。圆被感兴趣矩形所裁剪。 若指定圆的颜色,可以使用宏 CV_RGB ( r, g, b )。
#include<opencv2/core/core.hpp> //包含程序所使用的头文件和命名空间
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"using namespace cv;
#define Win_Name2 "Audi 奥迪"int main(int argc, char** argv)
{//绘制奥迪Audi车标
Mat image2 = Mat::zeros(600, 850, CV_8UC3);//生成一个850x600的窗口
circle(image2, Point(200, 300), 100, Scalar(225, 0, 225), 7, 8); //绘制第一个圆,半径为100,圆心(200,300),颜色为紫色
imshow(Win_Name2, image2);
waitKey();
return 0;}
2.Ellipse
绘制椭圆圆弧和椭圆扇形。
void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,double start_angle, double end_angle, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
img; 图像。
center : 椭圆圆心坐标。
axes : 轴的长度。
angle; 偏转的角度。
start_angle : 圆弧起始角的角度。.
end_angle; 圆弧终结角的角度。
color : 线条的颜色。
thickness : 线条的粗细程度。
line_type ; 线条的类型,见CVLINE的描述。
shift ; 圆心坐标点和数轴的精度。
函数cvEllipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形。圆弧被ROI矩形所忽略。反走样弧线和粗弧线使用线性分段近似值。所有的角都是以角度的形式给定的。
//----------------基本几何图像的绘制---------------//包含程序所使用的头文件和命名空间#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;#define Win_Name1 "Toyota 丰田"
//main函数
int main(int argc, char** argv)
{
//绘制丰田车标
Mat image1 = Mat::zeros(900, 900, CV_8UC3);//900x900的窗口
ellipse(image1, Point(450, 450), Size(400, 250), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第一个椭圆,大椭圆,颜色为红色
imshow(Win_Name1, image1);
waitKey();
return 0;
}
3.Rectangle
绘制简单、指定粗细或者带填充的 矩形
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
img : 图像.
pt1; 矩形的一个顶点。
pt2 ; 矩形对角线上的另一个顶点
color; 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。
thickness : 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
line_type; 线条的类型。见cvLine的描述
shift ; 坐标点的小数点位数。
函数 cvRectangle 通过对角线上的两个顶点绘制矩形。
//包含程序所使用的头文件和命名空间#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;//宏定义部分#define Win_Name3 "Cross 红十字"
//main函数
int main(int argc,char** argv)
{
<span style="white-space:pre"> </span>//绘制红十字
Mat image3 = Mat::zeros(800, 800, CV_8UC3);//生成一个800x800的窗口
Rect rec1 = Rect(100, 300, 600, 200);
rectangle (image3, rec1,Scalar(0, 0, 255), -1, 8, 0);//横矩形
rectangle (image3, Point(100, 300), Point(700, 500), Scalar(0, 255, 255), 2, 8, 0);//黄色矩形镶边
imshow(Win_Name3, image3);
waitKey();
return 0;
}
opencv中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数——在图像上绘制文字。这个函数即是cv::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'
);{std::string text = "Hello World!";int font_face = cv::FONT_HERSHEY_COMPLEX; double font_scale = 2;int thickness = 2;int baseline;//将文本框居中绘制cv::Point origin; origin.x = image.cols / 2 - text_size.width / 2;origin.y = image.rows / 2 + text_size.height / 2;cv::putText(image, text, origin, font_face, font_scale, cv::Scalar(0, 255, 255), thickness, 8, 0);
}