OpenCV (iOS)基本繪圖(5)

一個蘿蔔壹個坑發表於2017-12-27

函式介紹

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 (iOS)基本繪圖(5)


參考部落格

OpenCV for iOS 學習筆記(四)—— 基本繪圖

基本繪圖

相關文章