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