OpenCV 【十五】绘直线/椭圆/矩形/圆及其填充
生活随笔
收集整理的這篇文章主要介紹了
OpenCV 【十五】绘直线/椭圆/矩形/圆及其填充
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
1. 概況
2. 原理
2.1 Point
2.2 Scalar
3. 代碼
4.結果
1. 概況
-
如何用 Point 在圖像中定義 2D 點
-
如何以及為何使用 Scalar
-
用OpenCV的函數 line 繪 直線
-
用OpenCV的函數 ellipse 繪 橢圓
-
用OpenCV的函數 rectangle 繪 矩形
-
用OpenCV的函數 circle 繪 圓
-
用OpenCV的函數 fillPoly 繪 填充的多邊形
2. 原理
2.1 Point
次數據結構表示了由其圖像坐標 和 指定的2D點。可定義為:
Point pt;
pt.x = 10;
pt.y = 8;
// 或者
Point pt = Point(10, 8);
2.2 Scalar
-
表示了具有4個元素的數組。次類型在OpenCV中被大量用于傳遞像素值。
-
本節中,我們將進一步用它來表示RGB顏色值(三個參數)。如果用不到第四個參數,則無需定義
看個例子,如果給出以下顏色參數表達式:
Scalar( a, b, c )
//那么定義的RGB顏色值為: and *Blue = a* , *Green = b* ,*Red = c*
?
3. 代碼
double w = 320;
int main(int argc, char** argv) {/// 窗口名字char atom_window[] = "Drawing 1: Atom";char rook_window[] = "Drawing 2: Rook";/// 創建空全黑像素的空圖像Mat atom_image = Mat::zeros(w, w, CV_8UC3);Mat rook_image = Mat::zeros(w, w, CV_8UC3);/// 1. 畫一個簡單的原子。
?/// 1.a. 創建橢圓MyEllipse(atom_image, 90);MyEllipse(atom_image, 0);MyEllipse(atom_image, 45);MyEllipse(atom_image, -45);
?/// 1.b. 創建圓MyFilledCircle(atom_image, Point(w / 2.0, w / 2.0));
?/// 2. 畫一個賭棍
?/// 2.a. 創建一個凸多邊形MyPolygon(rook_image);
?/// 2.b. 創建矩形rectangle(rook_image,Point(0, 7 * w / 8.0),Point(w, w),Scalar(0, 255, 255),-1,8);
?/// 2.c. 畫幾條直線MyLine(rook_image, Point(0, 15 * w / 16), Point(w, 15 * w / 16));MyLine(rook_image, Point(w / 4, 7 * w / 8), Point(w / 4, w));MyLine(rook_image, Point(w / 2, 7 * w / 8), Point(w / 2, w));MyLine(rook_image, Point(3 * w / 4, 7 * w / 8), Point(3 * w / 4, w));
?/// 等待用戶按鍵waitKey();return 0;
}
?
void MyFilledCircle(Mat img, Point center)
{int thickness = -1;int lineType = 8;
?circle(img,center,w / 32.0,Scalar(0, 0, 255),thickness,lineType);
}
void MyPolygon(Mat img)
{int lineType = 8;
?/** 創建一些點 */Point rook_points[1][20];rook_points[0][0] = Point(w / 4.0, 7 * w / 8.0);rook_points[0][1] = Point(3 * w / 4.0, 7 * w / 8.0);rook_points[0][2] = Point(3 * w / 4.0, 13 * w / 16.0);rook_points[0][3] = Point(11 * w / 16.0, 13 * w / 16.0);rook_points[0][4] = Point(19 * w / 32.0, 3 * w / 8.0);rook_points[0][5] = Point(3 * w / 4.0, 3 * w / 8.0);rook_points[0][6] = Point(3 * w / 4.0, w / 8.0);rook_points[0][7] = Point(26 * w / 40.0, w / 8.0);rook_points[0][8] = Point(26 * w / 40.0, w / 4.0);rook_points[0][9] = Point(22 * w / 40.0, w / 4.0);rook_points[0][10] = Point(22 * w / 40.0, w / 8.0);rook_points[0][11] = Point(18 * w / 40.0, w / 8.0);rook_points[0][12] = Point(18 * w / 40.0, w / 4.0);rook_points[0][13] = Point(14 * w / 40.0, w / 4.0);rook_points[0][14] = Point(14 * w / 40.0, w / 8.0);rook_points[0][15] = Point(w / 4.0, w / 8.0);rook_points[0][16] = Point(w / 4.0, 3 * w / 8.0);rook_points[0][17] = Point(13 * w / 32.0, 3 * w / 8.0);rook_points[0][18] = Point(5 * w / 16.0, 13 * w / 16.0);rook_points[0][19] = Point(w / 4.0, 13 * w / 16.0);
?const Point* ppt[1] = { rook_points[0] };int npt[] = { 20 };
?fillPoly(img,ppt,npt,1,Scalar(255, 255, 255),lineType);
}
?
void MyEllipse(Mat img, double angle)
{int thickness = 2;int lineType = 8;
?ellipse(img,Point(w / 2.0, w / 2.0),Size(w / 4.0, w / 16.0),angle,0,360,Scalar(255, 0, 0),thickness,lineType);
}
?
void MyLine(Mat img, Point start, Point end)
{int thickness = 2;int lineType = 8;line(img,start,end,Scalar(0, 0, 0),thickness,lineType);
}
?
4.結果
?
總結
以上是生活随笔為你收集整理的OpenCV 【十五】绘直线/椭圆/矩形/圆及其填充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV 【十四】改变图像的对比度和
- 下一篇: OpenCV 【十六】RNG随机数发生器