3.opencv之画图1
来源:互联网 发布:java spring mvc路由 编辑:程序博客网 时间:2024/05/21 22:31
程序来源:F:\opencv\opencv\samples\cpp\tutorial_code\core\Matrix
程序:
/** * @file Drawing_1.cpp * @brief Simple sample code */#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#define w 400using namespace cv;/// Function headersvoid MyEllipse( Mat img, double angle );void MyFilledCircle( Mat img, Point center );void MyPolygon( Mat img );void MyLine( Mat img, Point start, Point end );/** * @function main * @brief Main function */int main( int argc, char **argv ){ /// Windows names char atom_window[] = "Drawing 1: Atom"; char rook_window[] = "Drawing 2: Rook"; /// Create black empty images Mat atom_image = Mat::zeros( w, w, CV_8UC3 ); Mat rook_image = Mat::zeros( w, w, CV_8UC3 ); /// 1. Draw a simple atom: /// ----------------------- /// 1.a. Creating ellipses MyEllipse( atom_image, 90 ); MyEllipse( atom_image, 0 ); MyEllipse( atom_image, 45 ); MyEllipse( atom_image, -45 ); /// 1.b. Creating circles MyFilledCircle( atom_image, Point( w/2.0, w/2.0) ); /// 2. Draw a rook /// ------------------ /// 2.a. Create a convex polygon MyPolygon( rook_image ); /// 2.b. Creating rectangles rectangle( rook_image, Point( 0, 7*w/8.0 ), Point( w, w), Scalar( 0, 255, 255 ), -1, 8 ); /// 2.c. Create a few lines MyLine( rook_image, Point( 0, 15*w/16 ), Point( w, 15*w/16 ) ); MyLine( rook_image, Point( w/4, 7*w/8 ), Point( w/4, w ) ); MyLine( rook_image, Point( w/2, 7*w/8 ), Point( w/2, w ) ); MyLine( rook_image, Point( 3*w/4, 7*w/8 ), Point( 3*w/4, w ) ); /// 3. Display your stuff! imshow( atom_window, atom_image ); cvMoveWindow( atom_window, 0, 200 ); imshow( rook_window, rook_image ); cvMoveWindow( rook_window, w, 200 ); waitKey( 0 ); return(0);}/// Function Declaration/** * @function MyEllipse * @brief Draw a fixed-size ellipse with different angles */void MyEllipse( Mat img, double angle ){ int thickness = 2; int lineType = 8; ellipse( img, Point( w/2.0, w/2.0 ), Size( w/4.0, w/16.0 ), angle, 0, 360, Scalar( 255, 0, 0 ), thickness, lineType );}/** * @function MyFilledCircle * @brief Draw a fixed-size filled circle */void MyFilledCircle( Mat img, Point center ){ int thickness = -1; int lineType = 8; circle( img, center, w/32.0, Scalar( 0, 0, 255 ), thickness, lineType );}/** * @function MyPolygon * @function Draw a simple concave polygon (rook) */void MyPolygon( Mat img ){ int lineType = 8; /** Create some points */ Point rook_points[1][20]; rook_points[0][0] = Point( w/4.0, 7*w/8.0 ); rook_points[0][1] = Point( 3*w/4.0, 7*w/8.0 ); rook_points[0][2] = Point( 3*w/4.0, 13*w/16.0 ); rook_points[0][3] = Point( 11*w/16.0, 13*w/16.0 ); rook_points[0][4] = Point( 19*w/32.0, 3*w/8.0 ); rook_points[0][5] = Point( 3*w/4.0, 3*w/8.0 ); rook_points[0][6] = Point( 3*w/4.0, w/8.0 ); rook_points[0][7] = Point( 26*w/40.0, w/8.0 ); rook_points[0][8] = Point( 26*w/40.0, w/4.0 ); rook_points[0][9] = Point( 22*w/40.0, w/4.0 ); rook_points[0][10] = Point( 22*w/40.0, w/8.0 ); rook_points[0][11] = Point( 18*w/40.0, w/8.0 ); rook_points[0][12] = Point( 18*w/40.0, w/4.0 ); rook_points[0][13] = Point( 14*w/40.0, w/4.0 ); rook_points[0][14] = Point( 14*w/40.0, w/8.0 ); rook_points[0][15] = Point( w/4.0, w/8.0 ); rook_points[0][16] = Point( w/4.0, 3*w/8.0 ); rook_points[0][17] = Point( 13*w/32.0, 3*w/8.0 ); rook_points[0][18] = Point( 5*w/16.0, 13*w/16.0 ); rook_points[0][19] = Point( w/4.0, 13*w/16.0) ; const Point* ppt[1] = { rook_points[0] }; int npt[] = { 20 }; fillPoly( img, ppt, npt, 1, Scalar( 255, 255, 255 ), lineType );}/** * @function MyLine * @brief Draw a simple line */void MyLine( Mat img, Point start, Point end ){ int thickness = 2; int lineType = 8; line( img, start, end, Scalar( 0, 0, 0 ), thickness, lineType );}
运行结果:
函数解释:(画图函数参见:http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/core/doc/drawing_functions.html)
1.椭圆函数:
void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar&color, int thickness=1, int lineType=8, int shift=0)
该函数是用来在指定图片上绘制椭圆弧线的。
参数img为需要绘制椭圆的图像;
参数center是该椭圆的中心点坐标;
参数axes是该椭圆的长半轴和短半轴;
参数angle是该椭圆和水平方向上的旋转夹角;
参数startAngle表示绘制椭圆弧线相对该椭圆自己的水平轴的起始角度;
参数endAngel表示绘制椭圆弧线相对该椭圆自己的水平轴的终止角度;
后面的参数比较普通就不介绍了。
绘制椭圆曲线的示意图如下所示:
2.画圆函数:
void circle(Mat& img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=8, intshift=0)
参数img为需要绘制圆的图像;
参数center是该圆的中心点坐标;
参数radius是该圆的半径;
......
此程序的具体解释见:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.html
画图的其他函数见:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/core/doc/drawing_functions.html
- 3.opencv之画图1
- OpenCV之鼠标画图
- 4.opencv之画图2
- OpenCV画图
- opencv之画图(Drawing Functions in OpenCV )
- Opencv学习之鼠标响应及画图操作
- OpenCV 2 学习之”鼠标描点画图“
- opencv画图函数
- OpenCV基本画图功能
- python+opencv画图操作
- OpenCV的一个画图程序!
- 如何在opencv中画图
- ios--OpenCV--画图像轮廓
- MFC动态绘图+OpenCV画图
- opencv实现简易画图工具
- MFC编程之三: 绘图-1(画图)
- MFC编程之三: 绘图-1(画图)
- R 画图之ggplot(1)
- DB2函数
- 数据结构的选择
- iOS多线程编程指南(一)关于多线程编程
- PHP 破解加密
- 求数组中最长递增子序列
- 3.opencv之画图1
- 国际化软件测试内容解析
- 无法找到服务器应用程序,源文件,和项目或返回的未知错误。请重新安装服务程序
- 各种大型网站技术架构
- IOS NSPredicate 查询、搜索
- [正能量系列]失业的程序员(一)
- Hibernate的学习
- 由NT Service中调用SendInput模拟键盘鼠标事件了解到的
- 路由(Routing)——ZigBee协议栈Z-Stack开发指南