2012-01-31 141 views
12

我正在嘗試使用http://iamabhik.wordpress.com/category/opencv/的想法實現車牌識別軟件。如何在Python中使用opencv複製圖像區域?

我使用「import cv2」在python中使用opencv實現了板位置。它可以正常工作,現在我需要將板區域複製到另一個圖像,以對字符進行分割,然後再進行OCR部分(可能使用神經網絡)。

我找到了GetSubRect()函數來複制或隔離圖像的一部分,但它似乎並沒有在Python中可用。有其他選擇嗎? ROI功能似乎也不被執行。

是否有最新的Python接口opencv的文檔?

我在Debian wheezy/sid環境下從svn倉庫(修訂版7239)編譯opencv。

隨意建議替代方法/想法來解決這個問題。

在此先感謝。

回答

42

cv.GetSubRect和ROI函數都可以在Python中使用,但在舊的import cv模式或import cv2.cv中。即使用cv2.cv.GetSubRect()cv2.cv.SetImageROI,如果你是他們的家庭。

另一方面,由於在新的cv2中進行numpy集成,因此設置沒有這些功能的ROI很容易。

如果(X1,Y1)和(x2,y2)的是你獲得板的兩個相對頂點,然後只需使用功能:

roi = gray[y1:y2, x1:x2] 

這是你的形象的投資回報率。

所以選擇適合你的任何東西。

+1

我嘗試使用SetImageROI,但在我的版本的OpenCV(2.4.1),這是行不通的 - 從複製(0,0)始終。 Slice ndarray這是非常明確和很好的解決方案。謝謝。 – Xeningem 2012-06-12 14:38:07

+0

我有同樣的問題,總是從點(0,0)複製,它使我瘋狂。具有numpy的cv2似乎是一個更好的解決方案。 – casper 2012-07-04 07:33:57

+2

好奇爲什麼它在y,x而不是x,y座標? cv2.rectangle需要x,y ...直觀地採取一個roi就像是一個矩形 – user391339 2015-06-20 02:26:55

4

例子:如果你有幾個點,並希望複製區域包含其

r = cv2.boundingRect(pts) 
cv2.imwrite('roi.png', im[r[0]:r[0]+r[2], r[1]:r[1]+r[3]]) 
+8

我認爲它實際上是r [1]:r [1] + r [3],r [0]:r [0] + r [2]'。 因爲boundingRect返回'r = [x,y,w,h]'且numpy語法期望'[y:y + h,x:x + w] ' – TKrugg 2016-06-07 21:57:40

相關問題