函式介紹
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);
實現的效果
參考部落格