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



  • 函數(shù)介紹

  • Point 可定義2D點
  • Scalar 表示了具有4個元素的數(shù)組。在OpenCV中被大量用于傳遞像素值。

  • line 繪制直線

  • ellipse 繪制橢圓

  • rectangle 繪制矩形

  • circle 繪制圓

  • fillPoly 繪制填充多邊形

  • Point

  • 使用Point描述一個點的方式
    1. 第一種方式 :cv::Point point;
    cv::point.x = x;
    cv::point.y = y;
      2. 第二種方式 :cv::Point point = cv::Point(x, y) 
    ( x 和 y 分別表示具體的坐標值 ) 
  • 注意 :
    - 此處必須使用cv::Point, 就算在引入頭文件下方加入了 using namespace cv;也不行,?接下來的代碼中也會出現(xiàn)必須加cv::調(diào)用

  • Scalar

這里用它來表示顏色值 第四個參數(shù)可省略:如下
Scalar(r, g, b);
RGB顏色值就為: Red = r; Green = g; Blue = b;
(OpenCV默認顏色值與RGB相反 ----> BGR,但是在OC上已經(jīng)被改為RGB)

  • 繪圖實現(xiàn)代碼(Drawing)

    • 我們來繪制一個竹蜻蜓
  • 創(chuàng)建一個空的全黑像素的空圖像
    Mat bamboo_dragonfly_image = Mat::zeros(w, w, CV_8SC3);
    w 為全局變量闯袒,表示創(chuàng)建的空圖像像素。此處是 double 類型;
    double w = 500;
  1. 繪制一個圓(circle
  * 主要代碼
        int circle_thickness = -1;
        int circle_lineType = 8;
        circle(img,
               cv::Point(w / 2.0, w / 3.0),
               w/32.0,
               Scalar(0, 0, 255),
               circle_thickness,
               circle_lineType);
  * 我們來看下 `circle ` 參數(shù)
        circle(InputOutputArray img,   // 我們創(chuàng)建的 Mat 空圖像(表示將圓加到圖像上面)
               Point center,           // 圓心所在坐標
               int radius,             // 圓的半徑         
               const Scalar& color,    // 圓的顏色
               int thickness = 1,      // 線粗(-1將被填充)
               int lineType = LINE_8,  // 線形
               int shift = 0           // 我也不知道干啥的桶蝎,可省略
               )
  1. 繪制兩個橢圓 (ellipse)
 * 左邊的橢圓代碼 
       int ellipse_thickness = -1;
       int ellipse_lineType = 8;
       ellipse(img,
               cv::Point(w / 2.0 - w / 5.0, w / 3.0),
               cv::Size(w / 5.0, w / 20.0),
               0,
               0,
               360,
               Scalar(255, 0, 0),
               ellipse_thickness,
               ellipse_lineType);
   * 右邊的橢圓代碼  
       ellipse(img,
               cv::Point(w / 2.0 + w / 5.0, w / 3.0),
               cv::Size(w / 5.0, w / 20.0),
               angle,
               0,
               360,
               Scalar(255, 0, 0),
               ellipse_thickness,
               ellipse_lineType);
  * 我們來看下 `ellipse ` 參數(shù)
       ellipse(InputOutputArray img,  // 我們創(chuàng)建的 Mat 空圖像(表示將圓加到圖像上面)
               Point center,          // 橢圓圓心所在坐標
               Size axes,             // 橢圓的 “長軸” 和 “短軸”
               double angle,          // 橢圓旋轉(zhuǎn)角度
               double startAngle,     // 橢圓擴展的弧度 開始
               double endAngle,       // 橢圓擴展的弧度 結(jié)束 (通過控制這里的兩個Angle,可以繪制弧線)
               const Scalar& color,   // 橢圓顏色
               int thickness = 1,     // 線粗(-1將被填充)
               int lineType = LINE_8, // 線形
               int shift = 0          // 上述橢圓中代碼省略了該參數(shù)
               )
  • 繪制一個矩形(rectangle
    • 主要代碼
       int rectangle_thickness = -1;
       int rectangle_lineType = 8;
       rectangle(atom_image,
                 cv::Point(w / 2.0 - w / 64, w / 3.0 + w / 34),
                 cv::Point(w / 2.0 + w / 64, w - 10),
                 Scalar(255, 255, 0),
                 rectangle_thickness,
                 rectangle_lineType);
   * 我們來看下 `rectangle ` 參數(shù)
       rectangle(InputOutputArray img,  // 我們創(chuàng)建的 Mat 空圖像(表示將圓加到圖像上面)
                 Point pt1,             // 起始點(我取的是矩形左上角的點)
                 Point pt2,             // 終點(我取的是右下角的點)
                                           這里兩個點(起始點谅畅,終點)取矩形對角的形勢登渣,確定對角,便確定了矩形的長寬毡泻。
                 const Scalar& color,   // 顏色
                 int thickness = 1,     //  線粗(-1將被填充)
                 int lineType = LINE_8, // 線形
                 int shift = 0)         // 上述矩形代碼中省略了該參數(shù)
  • 最后 我們需將 Mat 圖像轉(zhuǎn)換成 UIImage 對象
    _imgView.image = MatToUIImage(bamboo_dragonfly_image);

  • 效果圖:


    使用 OpenCV 繪制的竹蜻蜓
  • 繪制直線代碼
  •     cv::Point point_start = cv::Point(0, 15 * w / 16);
        cv::Point point_end = cv::Point(w, 15 * w / 16);
        int line_thickness = 2;
        int line_lineType = 8;
        line(img,                 // 同理這里首先得創(chuàng)建一個 Mat 空圖像
             point_start,         // 起始點
             point_end,           // 終點
             Scalar(255, 255, 0), // 顏色
             line_thickness,      // 線粗
             line_lineType);      // 線形
    
  • 繪制一個填充三角形代碼
  • 創(chuàng)建 Mat 對象
    Mat triangle_image = Mat::zeros(w, w, CV_8SC3);
  • 繪制三角形的三個頂點
    /** 創(chuàng)建三角形三個頂點 用矩陣的形式創(chuàng)建 /
    cv::Point rook_points[1][3];
    rook_points[0][0] = cv::Point(7 * w / 8.0, 7 * w / 8.0);
    rook_points[0][1] = cv::Point(w - 7 * w / 8.0, 7 * w / 8.0);
    rook_points[0][2] = cv::Point(w - 7 * w / 8.0, w - 7 * w / 8.0);
    /
    * 創(chuàng)建三角形頂點集合 /
    const cv::Point
    ppt[1] = {rook_points[0]};
    /** 三角形頂點數(shù)目 */
    int npt[] = {3};
    fillPoly(triangle_image, // 將三角形放到圖像上
    ppt, // 三角形頂點集合
    npt, // 三角形頂點數(shù)量
    1, // 繪制的數(shù)量
    Scalar(255, 255, 255), // 三角形填充顏色
    8); // 線形
  • 最后 我們需將 Mat 圖像轉(zhuǎn)換成 UIImage 對象
    _imgView2.image = MatToUIImage(triangle_image);
  • 效果圖:


    OpenCV 繪制三角形
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胜茧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仇味,更是在濱河造成了極大的恐慌呻顽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丹墨,死亡現(xiàn)場離奇詭異廊遍,居然都是意外死亡,警方通過查閱死者的電腦和手機带到,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門昧碉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揽惹,你說我怎么就攤上這事被饿。” “怎么了搪搏?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵狭握,是天一觀的道長。 經(jīng)常有香客問我疯溺,道長论颅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任囱嫩,我火速辦了婚禮恃疯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘墨闲。我一直安慰自己今妄,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盾鳞,像睡著了一般犬性。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腾仅,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天乒裆,我揣著相機與錄音,去河邊找鬼推励。 笑死鹤耍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的吹艇。 我是一名探鬼主播惰蜜,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼受神!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起格侯,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鼻听,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后联四,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撑碴,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年朝墩,在試婚紗的時候發(fā)現(xiàn)自己被綠了醉拓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡收苏,死狀恐怖亿卤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹿霸,我是刑警寧澤排吴,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站懦鼠,受9級特大地震影響钻哩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肛冶,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一街氢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睦袖,春花似錦珊肃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘶摊。三九已至,卻和暖如春评矩,著一層夾襖步出監(jiān)牢的瞬間叶堆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工斥杜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虱颗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓蔗喂,卻偏偏與公主長得像忘渔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缰儿,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容