OpenCV學習_ios平臺(三):基本繪圖

demo地址:
https://github.com/GoldenRocking/OpenCV_iOS
一.直線:

void cvLine{
     CvArr*           array,              //一般為一個圖像類型的指針I(yè)plImage*
     CvPoint           pt1,               //起始點坐標
     CvPoint           pt2,               //結束點坐標
     CvScalar         color,              //顏色
     int            thickness  = 1,         //  線的粗細(像素)
     int            connectivity  = 8      //反走樣模式         
}

二.矩形:

void cvRectangle{
     CvArr*           array,            
     CvPoint           pt1,               //頂點坐標1
     CvPoint           pt2,               //頂點坐標2
     CvScalar         color,              //顏色
     int            thickness  = 1,       //  線的粗細(像素)      
}

三.圓:

void cvCircle{
     CvArr*           array,            
     CvPoint           center,             //圓心
     int               radius,             //半徑
     CvScalar          color,              //顏色
     int            thickness  = 1,        //線的粗細(像素) 
     int            connectivity  = 8      //反走樣模式         
}

四.橢圓:

void cvEllipse{
     CvArr*             array,            
     CvPoint            center,              //圓心
     CVSize              axes,               //橢圓的長短半軸長度
     double              angle,              //偏離主軸的角度
     double             start_angle,         //弧度開始位置的角度
     double             end_angle,           //弧度結束位置的角度
     CvScalar            color,              //顏色
     int               thickness  = 1,       //線的粗細(像素) 
     int               connectivity  = 8      //反走樣模式         
}

五.橢圓(外接矩形):

void cvEllipse{
     CvArr*             array,            
    CvBox2D             box,
     CvScalar           color,              //顏色
     int               thickness  = 1,       //線的粗細(像素) 
     int               connectivity  = 8蒲跨,      //反走樣模式  
     int               shift = 0       
}

//CvBox2D的數(shù)據(jù)結構:
tydef struct {
      CvPoint2D32f       center;
      CvSize2D32f         size;
      float               angle;
}  CvBox2D

六.多邊形

void cvFillPoly{
      CvArr*               img,
      CvPoint**            pst,
      int*                 npts,
      int                 contours,
      CvScallar            color,
      int                 line_type  =  8
}

void cvFillConvexPoly{
      CvArr*               img,
      CvPoint*             pst,
      int                  npts,
      CvScallar            color,
      int                 line_type  =  8
}

void cvPolyLine{
      CvArr*                img,
      CvPoint**             pst,
      int*                  npts,
      int                   contours,
      int                   is_closed, 
      CvScallar             color,
      int                   thickness = 1,
      int                   line_type  =  8
}

下面我們根據(jù)基本繪圖函數(shù),來繪制兩張圖像姑子。

先創(chuàng)建一個繪圖的工具:

#ifndef drawTool_hpp
#define drawTool_hpp

#include <stdio.h>
using namespace cv;
void MyEllipse(Mat img,double angle,int w);
void MyFilledCircle(Mat img,cv::Point center);
void MyPolygon( Mat img,int w);
void MyLine( Mat img, cv::Point start, cv::Point end );

#endif /* drawTool_hpp */

#include "drawTool.hpp"


void MyEllipse(Mat img,double angle,int w)
{
    int thickness = 2;
    int lineType = 8;
    
    ellipse(img,
            cv::Point(w/2.0,w/2.0),
            cv::Size(w/4.0,w/16.0),
            angle,
            0,
            360,
            Scalar(255,0,0),
            thickness,
            lineType
            );
}

void MyFilledCircle(Mat img,cv::Point center)
{
    int thickness = -1;
    int lineType = 8;
    
    cv::circle( img,
               center,
               300/32.0,
               cv:: Scalar( 0, 0, 255 ),
               thickness,
               lineType );
}

void MyPolygon( Mat img,int w )
{
    int lineType = 8;
    
    /** 創(chuàng)建一些點 */
    cv::Point rook_points[1][20];
    rook_points[0][0] = cv::Point( w/4.0, 7*w/8.0 );
    rook_points[0][1] = cv::Point( 3*w/4.0, 7*w/8.0 );
    rook_points[0][2] = cv::Point( 3*w/4.0, 13*w/16.0 );
    rook_points[0][3] = cv::Point( 11*w/16.0, 13*w/16.0 );
    rook_points[0][4] = cv::Point( 19*w/32.0, 3*w/8.0 );
    rook_points[0][5] = cv::Point( 3*w/4.0, 3*w/8.0 );
    rook_points[0][6] = cv::Point( 3*w/4.0, w/8.0 );
    rook_points[0][7] = cv::Point( 26*w/40.0, w/8.0 );
    rook_points[0][8] = cv::Point( 26*w/40.0, w/4.0 );
    rook_points[0][9] = cv::Point( 22*w/40.0, w/4.0 );
    rook_points[0][10] = cv::Point( 22*w/40.0, w/8.0 );
    rook_points[0][11] = cv::Point( 18*w/40.0, w/8.0 );
    rook_points[0][12] = cv::Point( 18*w/40.0, w/4.0 );
    rook_points[0][13] = cv::Point( 14*w/40.0, w/4.0 );
    rook_points[0][14] = cv::Point( 14*w/40.0, w/8.0 );
    rook_points[0][15] = cv::Point( w/4.0, w/8.0 );
    rook_points[0][16] = cv::Point( w/4.0, 3*w/8.0 );
    rook_points[0][17] = cv::Point( 13*w/32.0, 3*w/8.0 );
    rook_points[0][18] = cv::Point( 5*w/16.0, 13*w/16.0 );
    rook_points[0][19] = cv::Point( w/4.0, 13*w/16.0) ;
    
    const cv::Point* ppt[1] = { rook_points[0] };
    int npt[] = { 20 };
    
    fillPoly( img,
             ppt,
             npt,
             1,
             Scalar( 255, 255, 255 ),
             lineType );
}

void MyLine( Mat img, cv::Point start, cv::Point end )
{
    int thickness = 2;
    int lineType = 8;
    line( img,
         start,
         end,
         Scalar( 0, 0, 0 ),
         thickness,
         lineType );
}

首先,我們繪制一個基本的原子::


const int w = 300;
/// 創(chuàng)建空全黑像素的空圖像
    Mat atom_image = Mat::zeros(w, w, CV_8UC3);

/// 1. 畫一個簡單的原子肠阱。

   
    /// 1.a. 創(chuàng)建橢圓
   MyEllipse(atom_image, 90,w);
    MyEllipse(atom_image, 0,w);
    MyEllipse(atom_image, 45,w);
    MyEllipse(atom_image, -45,w);

    /// 1.b. 創(chuàng)建圓
    MyFilledCircle( atom_image, cv::Point( w/2.0, w/2.0) );
    
    UIImageView *img = [[UIImageView alloc]init];
    img.frame = CGRectMake(10, 0, w, w);
    [img setImage:[cvprocess UIImageFromCVMat:atom_image ]];
    
    [self.view addSubview:img];
    

然后票唆,我們再繪制一個賭棍:

調(diào)用:

/// 創(chuàng)建空全黑像素的空圖像
 
    Mat rook_image = Mat::zeros(w, w, CV_8UC3);
   /// 2. 畫一個賭棍
    
    /// 2.a. 創(chuàng)建一個凸多邊形
    MyPolygon( rook_image ,w);
    
    /// 2.b. 創(chuàng)建矩形
    rectangle( rook_image,
              cv::Point( 0, 7*w/8.0 ),
              cv::Point( w, w),
              Scalar( 0, 255, 255 ),
              -1,
              8 );
    
    /// 2.c. 畫幾條直線
    MyLine( rook_image, cv::Point( 0, 15*w/16 ), cv::Point( w, 15*w/16 ) );
    MyLine( rook_image, cv::Point( w/4, 7*w/8 ), cv::Point( w/4, w ) );
    MyLine( rook_image, cv::Point( w/2, 7*w/8 ), cv::Point( w/2, w ) );
    MyLine( rook_image, cv::Point( 3*w/4, 7*w/8 ), cv::Point( 3*w/4, w ) );
    
    UIImageView *img2 = [[UIImageView alloc]init];
    img2.frame = CGRectMake(10, 320, w, w);
    [img2 setImage:[cvprocess UIImageFromCVMat:rook_image ]];
    
    [self.view addSubview:img2];

運行結果:

AA79CD99-C49D-4EB4-8540-913F225197A2.png

demo地址:
https://github.com/GoldenRocking/OpenCV_iOS

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辖所,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磨德,老刑警劉巖缘回,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異典挑,居然都是意外死亡酥宴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門您觉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拙寡,“玉大人,你說我怎么就攤上這事琳水∷粮猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵在孝,是天一觀的道長诚啃。 經(jīng)常有香客問我,道長私沮,這世上最難降的妖魔是什么始赎? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮仔燕,結果婚禮上造垛,老公的妹妹穿的比我還像新娘。我一直安慰自己晰搀,他們只是感情好五辽,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著外恕,像睡著了一般奔脐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吁讨,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天髓迎,我揣著相機與錄音,去河邊找鬼建丧。 笑死排龄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播橄维,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼尺铣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了争舞?” 一聲冷哼從身側(cè)響起凛忿,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竞川,沒想到半個月后店溢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡委乌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年床牧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遭贸。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡戈咳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壕吹,到底是詐尸還是另有隱情著蛙,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布耳贬,位于F島的核電站册踩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏效拭。R本人自食惡果不足惜暂吉,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一拉宗、第九天 我趴在偏房一處隱蔽的房頂上張望刁俭。 院中可真熱鬧赠堵,春花似錦躲查、人聲如沸颖系。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饮笛。三九已至判导,卻和暖如春嫉父,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背眼刃。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工绕辖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人擂红。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓仪际,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子树碱,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • 超市上班第六天肯适,銷售不是很好,站立習慣了成榜,就是感覺累框舔,忙也好點,但是生意不好赎婚,沒辦法刘绣,干站著,無所事事惑淳,快下班的時...
    憧憬幸福閱讀 350評論 0 1
  • 我是一部手機额港。剛出生不久我就被運到了商店饺窿,在這里我和我的兄弟姐妹只需要躺在漂亮的展示柜里就可以領養(yǎng)一個仆人歧焦。 我們...
    小森之螢Iris閱讀 456評論 0 0