2014-07-14 270 views
1

我使用OpenCV通過Python在圖像中檢測到一系列水平線。使用OpenCV Python進行多邊形或自由形狀繪製

對於每一行,我有一系列(x,y)點沿線。點以固定間隔穿過X軸上的圖像。

我想繪製一個實心矩形,它將圖像從一行覆蓋到下一行,而填充將是白色,以隱藏構成兩組行線點頂部和底部的行上的內容。

問題是,當我穿過圖像時,線條的Y位置變化很小,所以矩形不會很好地適合該行。

我覺得我基本上需要使用我所知道的點來繪製自由形狀並填寫 使頂部和底部線點之間的區域着色。

我曾嘗試創建一個

cv2.fillPoly(image, np.array([polygon_points], np.int32), 255) 

然而,而不是產生一個完全填充圖案覆蓋圖像的行,我得到兩個三角形,其開始在正確的點,但在滿足:使用我有以下命令點多邊形中間,剩下的'矩形'沒有填充。

如何在OpenCV中繪製自由形狀,該自由形狀覆蓋沿着頂部和底部線條的點,但也填充了兩條線之間的所有像素?

我希望這是有道理的。謝謝你的幫助。

+0

是否回答您的問題? –

回答

1

這是因爲你的觀點是在你的名單可能歸類爲後續(未遂)圖爲

_________________________ 
| pt1 pt2 ... ptm | 
|      | 
|      | 
| ptm+1 ptm+2 ... pt2m | 
|________________________| 

因爲這個填充工具函數試圖從PTM到PTM填寫+ 1讓你的三角形(我個人將其描述爲沙漏形狀)。您的問題有兩種解決方案。要麼你可以從

points = [pt1, pt2, ..., ptm, ptm+1, ptm+2, ..., pt2m] 

翻轉第二設定點更改列表來

points = [pt1, pt2, ..., ptm, pt2m, pt2m-1, ..., ptm+1] 

後跟您通話(但fillConvexPoly顯然要快得多)

或替代

x1 = min(x_points) 
y1 = min(y_points) 
x2 = max(x_points) 
y2 = max(y_points) 
cv2.rectangle(img, (x1,y1), (x2,y2), thickness=-1) 

編輯:如果你是l可以使用opencv函數convexHull來確定凸包(最小封閉點集合)並填充該多邊形。文檔如下:

http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=convexhull#convexhull