OpenCV (iOS)基本绘图(5)

2017-05-03  本文已影响157人  傻傻小萝卜

函数介绍

Point可定义2D点

Scalar表示了具有4个元素的数组。在OpenCV中被大量用于传递像素值。

line绘制直线

ellipse绘制椭圆

rectangle绘制矩形

circle绘制圆

fillPoly绘制填充多边形

Point

次数结构表示了由其图像坐标x和y指定2D点,可表示为:

cv::Point pt;//此处必须使用cv::Point, 就算在引入头文件下方加入了using namespace cv;也不行

pt.x = 10;

pt.y = 10;

或者是

cv::Point point= cv::Point(8,10);

Scalar

表示了具有四个元素的数组。此类型在OpenCV中被大量用于传递像素值,第四个参数可以忽略

Scalar(r, g, b);

RGB颜色值就为: Red = r; Green = g; Blue = b;

(OpenCV默认颜色值与RGB相反 ----> BGR,但是在OC上已经被改为RGB)

创建一个空的全黑像素的空图像

Mat bamboo_dragonfly_image= Mat::zeros(w, w, CV_8SC3);

Line

cv::Point pLine1 = cv::Point(10,400);// 起始点

cv::Point pLine2 = cv::Point(300,400);// 终点

int line_thickness = 2;// 线粗

int line_lineType = 8;// 线形

//    cv::line(bamboo_dragonfly_image, pLine1, pLine2, Scalar(100,0,255));

cv:: line(bamboo_dragonfly_image,// 同理这里首先得创建一个 Mat 空图像

            pLine1,// 起始点

            pLine2,// 终点

            Scalar(100,0,255),// 颜色

          line_thickness,// 线粗

          line_lineType,// 线形

           0);

ellipse

cv::Point p1 = cv::Point(100,250);

cv::Size s1 = cv::Size(80,30);

cv::ellipse(bamboo_dragonfly_image, p1, s1,

0, 0, 360,

Scalar(255,255,0), -1,

LINE_8,  0);

ellipse的参数

            ellipse(InputOutputArray img,      // 我们创建的 Mat 空图像(表示将圆加到图像上面)

             Point center,// 椭圆圆心所在坐标

             Size axes,// 椭圆的 “长轴” 和 “短轴”

               double angle,// 椭圆旋转角度

                double startAngle,// 椭圆扩展的弧度 开始

               double    endAngle,// 椭圆扩展的弧度 结束 (通过控制这里的两个Angle,可以绘制弧线)

                const Scalar &color,// 椭圆颜色

                 int thickness =1,// 线粗(-1将被填充)

                  int lineType = LINE_8,// 线形

                  int shift =0// 上述椭圆中代码省略了该参数)

rectangle

int rectangle_thickness = -1;

int rectangle_lineType = 8;

cv::Point p1 = cv::Point(100,250);

cv::Point p3 = cv::Point(280,300);

cv::rectangle(bamboo_dragonfly_image, p1, p3, Scalar(0,255,255),rectangle_thickness,rectangle_lineType);

rectangle的参数

rectangle(InputOutputArray img,// 我们创建的 Mat 空图像(表示将圆加到图像上面)

             Point pt1,// 起始点(我取的是矩形左上角的点)

              Point pt2,// 终点(我取的是右下角的点)这里两个点(起始点,终点)取矩形对角的形势,确定对角,便确定了矩形的长宽。

               const Scalar &color,// 颜色

               int thickness =1,//  线粗(-1将被填充)

                int lineType = LINE_8,// 线形

                 int shift =0)// 上述矩形代码中省略了该参数

circle

int circle_thickness = -1;

int circle_lineType = 8;

double w = 50;

cv::Point point = cv::Point(100,100);

cv::circle(bamboo_dragonfly_image, point, w,Scalar(0,0,255),circle_thickness,circle_lineType);

circle的参数

circle(InputOutputArray img,// 我们创建的 Mat 空图像(表示将圆加到图像上面)

         Point center,// 圆心所在坐标

         int radius,// 圆的半径

         const Scalar& color,// 圆的颜色

        int thickness =1,// 线粗(-1将被填充)

          int lineType = LINE_8,// 线形

          int shift =0// 我也不知道干啥的,可省略)

fillPoly

绘制三角形

/** 创建三角形三个顶点 用矩阵的形式创建 */

cv::Point rook_points[1][3];

rook_points[0][0] = cv::Point(100,400);

rook_points[0][1] = cv::Point(50,450);

rook_points[0][2] = cv::Point(150,450);

/** 创建三角形顶点集合 */

const cv::Point* ppt[1] = {rook_points[0]};

/** 三角形顶点数目 */

int npt[] = {3};

cv::fillPoly(bamboo_dragonfly_image, // 将三角形放到图像上

                  ppt,                                      //三角形顶点集合

                  npt,                                    // 三角形顶点数量

                  1,                                      // 绘制的数量

                    Scalar(255,0,255));    // 三角形填充颜色

最后 我们需将 Mat 图像转换成 UIImage 对象

imagView1.image = MatToUIImage(bamboo_dragonfly_image);

实现的效果

参考博客

OpenCV for iOS 学习笔记(四)—— 基本绘图

基本绘图

上一篇下一篇

猜你喜欢

热点阅读