在python中, cv2.polylines和cv2.fillpoly對於參數pts的要求是一致的,而在c++中是不一致的。
python中,傳參方式為:
image = np.zeros(512, 512, np.uint8)
pts = []
pts.append([x, y]) # 添加頂點
pts = pts.reshape((-1, 1, 2))
# 這里 reshape 的第一個參數為-1, 表明這一維的長度是根據后面的維度的計算出來的。
# OpenCV中需要先將多邊形的頂點坐標變成頂點數×1×2維的矩陣,再來繪制
# --------------畫多邊形---------------------
image = cv2.polylines(image , [pts], True, (255, 255, 255))
##-------------填充多邊形---------------------
image = cv2.fillPoly(image , [pts], (255, 255, 255))
很明顯可以看出,ploylines函數和fillPoly函數傳參相同
對於c++而言,代碼則為:
`
Mat image = Mat::ones(512, 512, CV_8UC3)
vector
pts.push_back(Point(x, y));
polylines(image , pts, true, (255, 255, 255));
vector<vector<Point>> ppts;
ppts.push_back(pts);
fillPoly(image , ppts, (255, 255, 255));
很明顯,polylines函數和fillPoly函數所需參數不同,fillPoly函數需要二維嵌套
vector<vector
,否則無法正常使用。若使用
vector