一、知識點
API 知識點:
1、polylines&fillPoly
2、drawContours
二、函式原型
1、polylines
polylines的c++原型:
- 引數一:img 作為畫布的矩陣(影像)
- 引數二:pts 折線頂點陣列(pts 的型別為 InputArrayOfArrays, 而 InputArrayOfArrays 的本源是 vector)
- 引數三:isClosed 是否是閉合折線(多邊形)
- 引數四:color 線條顏色 (RGB) 或亮度(灰度影像 )
- 引數五:thickness 組成矩形的線條的粗細程度,
- 引數六:lineType 線條的型別,8或4
- 引數七:shift 縮放比例(0是不縮放,5是1/5)
注:
引數五的thickness 取負值時,不能填充多邊形,否則出現以下報錯
2、fillPoly——對多邊形進行填充,配合polylines使用
c++原型:
- 引數一:img 作為畫布的矩陣(影像)
- 引數二:pts 折線頂點陣列(pts 的型別為 InputArrayOfArrays,而 InputArrayOfArrays 的本源是 vector)
- 引數三:npts 折線頂點個數
- 引數四:ncontours 待繪制折線數
- 引數五:color 線條顏色 (RGB) 或亮度(灰度影像)
- 引數六:lineType 線條的型別,8或4
- 引數七:shift 縮放比例(0是不縮放,5是1/5)
- 引數八: 坐標偏移
3、drawContours——多邊形繪制及填充
c++原型:
- 引數一:img 作為畫布的矩陣(影像)
- 引數二:contours 表示輸入的多邊形組,每一組多邊形由點vector構成
- 引數三:contourIdx 指明畫第幾個多邊形,如果該引數為負值,則畫全部多邊形
- 引數四:color 線條顏色 (RGB) 或亮度(灰度影像 )
- 引數五:thickness 組成矩形的線條的粗細程度,如果為負值或CV_FILLED表示填充輪廓內部,如果想要每一個多邊形僅是繪制的話就改成正值
- 引數六:lineType 線條的型別
- 引數七:hierarchy 輪廓結構資訊
注:以上填充完的多邊形可以作為mask進行使用,然后用bitwise那些函式,就可以提取出任意形狀的ROI區域
三、實作效果

四、代碼
//繪制多邊形
void test1::polyline_drawing()
{
Mat canvas = Mat::zeros(Size(512,512),CV_8UC3);
Point p1(100, 100);
Point p2(350, 100);
Point p3(450, 270);
Point p4(230, 450);
Point p5(30, 270);
Point p6(230, 170);
std::vector<Point> pts;
//將6個點裝入向量容器內
//未初始化陣列容量,只能用pushback操作
//如果初始化,可以用陣列下標操作
pts.push_back(p1);
pts.push_back(p6);
pts.push_back(p2);
pts.push_back(p3);
pts.push_back(p4);
pts.push_back(p5);
std::vector<Point> pts2;
Point p01(100, 110);
Point p02(350, 110);
Point p03(225, 290);
pts2.push_back(p01);
pts2.push_back(p02);
pts2.push_back(p03);
// fillPoly(canvas,pts,Scalar(255,0,255),8,0);//填充polylines函式繪制的多邊形
// polylines(canvas,pts,true,Scalar(0,0,255),2,8,0);//這個函式不能進行填充
vector<std::vector<Point>> contours;
// contours.push_back(pts);
contours.push_back(pts2);
drawContours(canvas,contours,-1,Scalar(0,255,255),-1,8);//0換成-1表示一次性繪制所有圖形
imshow("polyline_drawing",canvas);
}
原創不易,轉載請注明出處:
https://blog.csdn.net/hml111666/article/details/122770582
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423344.html
標籤:AI





