c++ opencv fillpoly函數的注意事項


在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;
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 > ppts; ,否則無法正常使用。若使用vector pts;`,會導致程序中斷,但不會在編譯器中報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM