本文主要内容:
一、介绍OpenCV中三个绘图函数:circle() 、ellipse() 、rectangle()
二、函数的应用实例,利用这些函数分别绘制了丰田车标、奥迪车标以及红十字,并附上代码。
绘制圆形。
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 );
函数cvCircle绘制或填充一个给定圆心和半径的圆。圆被感兴趣矩形所裁剪。 若指定圆的颜色,可以使用宏 CV_RGB ( r, g, b )。
*************************************代码********************
#include //包含程序所使用的头文件和命名空间
#include
#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),颜色为紫色
circle(image2, Point(350, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(350,300),线宽为7
circle(image2, Point(500, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(500,300)
circle(image2, Point(650, 300), 100, Scalar(225, 0, 225), 7, 8);//绘制第一个圆,半径为100,圆心(650,300)
imshow(Win_Name2, image2);
waitKey();
return 0;
}
运行结果:
*************************************END********************
绘制椭圆圆弧和椭圆扇形。
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 );
函数cvEllipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形。圆弧被ROI矩形所忽略。反走样弧线和粗弧线使用线性分段近似值。所有的角都是以角度的形式给定的。
*************************************代码********************
//----------------基本几何图像的绘制---------------
//包含程序所使用的头文件和命名空间
#include
#include
#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);//绘制第一个椭圆,大椭圆,颜色为红色
ellipse(image1, Point(450, 450), Size(250, 110), 90, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第二个椭圆,竖椭圆
ellipse(image1, Point(450, 320), Size(280, 120), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第三个椭圆,小椭圆(横)
imshow(Win_Name1, image1);
waitKey();
return 0;
}
运行结果:
*************************************END********************
绘制简单、指定粗细或者带填充的 矩形
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8, int shift=0 );
函数 cvRectangle 通过对角线上的两个顶点绘制矩形。
*************************************代码********************
//包含程序所使用的头文件和命名空间
#include
#include
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
//宏定义部分
#define Win_Name3 "Cross 红十字"
//main函数
int main(int argc,char** argv)
{
//绘制红十字
Mat image3 = Mat::zeros(800, 800, CV_8UC3);//生成一个800x800的窗口
Rect rec1 = Rect(100, 300, 600, 200);
Rect rec2 = Rect(300, 100, 200, 600);
rectangle (image3, rec1,Scalar(0, 0, 255), -1, 8, 0);//横矩形
rectangle (image3, rec2, Scalar(0, 0, 255), -1, 8, 0);//竖矩形
rectangle (image3, Point(100, 300), Point(700, 500), Scalar(0, 255, 255), 2, 8, 0);//黄色矩形镶边
rectangle(image3, Point(300, 100), Point(500, 700), Scalar(0, 255, 255), 2, 8, 0);//黄色矩形镶边
rectangle(image3, Point(300, 300), Point(500, 500), Scalar(0, 0, 255), 3, 8);//红色正方形覆盖(中央)
imshow(Win_Name3, image3);
waitKey();
return 0;
}
*************************************END********************