2013-03-14 73 views
3

考慮以下圖像的形狀的子圖像:提取多邊形

Image of traffic

這是從業務的視頻鏡頭的幀。

我想要做的是隻剪出即將到來的流量並分析它。我想要一個快速高效的方法,通過提供某些座標,我可以提取多邊形等。

我正在研究OpenCV和Python。

編輯:
一個選擇我看到的是處理圖像numpy的數組,並使用for循環中提取某些元素,但不會是有效的,我不知道,如果它的正確的事情。

+0

@Schoolboy對不起,更新的問題 – md1hunox 2013-03-14 08:04:26

回答

4

我會建議使用輪廓提取您感興趣的區域(任何你想要的形狀)。 請參閱本文檔:Drawing Contours

你的方法應該如下:

  1. 標誌點,使你的座標無論是圖像本身由MouseEventListener連接到窗口。
  2. 通過使用創建一個面具圖像。 (全零)
  3. 使用這些座標集,使用cv2.drawContours()方法在「蒙版圖像」上繪製所需的形狀,並用白色(255)填充它。
  4. 使用原始灰度圖像進行Bitwise_And操作。

示例代碼:

#Function 
def on_mouse(event, x, y, flags,(cPts,overlayImage,resetImage)): 
    if event==cv.CV_EVENT_LBUTTONUP: 
     cPts[0].append([x,y]) 
     cv2.circle(overlayImage,(x,y),5,(255),-1) 
    elif event==cv.CV_EVENT_RBUTTONUP: 
     cPts[0]=[] 
     print cPts 
     overlayImage[:]=resetImage[:] 


#Main Program 
cvImage=cv2.imread(inputImageFilePath) 
grayscaleImage=cv2.cvtColor(cvImage,cv.CV_BGR2GRAY) 
overlayImage=np.copy(grayscaleImage) 

cv2.namedWindow('preview') 
cPts=[[]] 
cv2.setMouseCallback('preview',on_mouse,(cPts,overlayImage,grayscaleImage)) 
opacity=0.4 
while True: 
    displayImage=cv2.addWeighted(overlayImage,opacity,grayscaleImage,1-opacity,0) 
    cv2.imshow('preview',displayImage) 
    keyPressed=cv2.waitKey(5) 
    if keyPressed==27: 
     break 
    elif keyPressed==32: 
     print cPts 
     cv2.drawContours(overlayImage,np.array(cPts),0,255) 
     maskImage=np.zeros_like(grayscaleImage) 
     cv2.drawContours(maskImage,np.array(cPts),0,255,-1) 
     extractedImage=np.bitwise_and(grayscaleImage,maskImage) 
     cv2.imshow('extractedImage',extractedImage) 
cv2.destroyAllWindows() 
+0

謝謝!解決了它 – md1hunox 2013-03-16 15:47:09

1

我可以提出一個版本的算法:

  1. 第一丟棄圖像的一部分,你是不感興趣,如果一個靜態的攝像頭,你可以手動計算該區域。在其他情況下嘗試使用Line Detection Algorithm
  2. 然後用cvThreshold抽取背景(使用background extraction的很好例子)。
  3. 提取後,您可以找到輪廓並分析它們的形狀以區分物體(汽車,人等)。

希望這會有所幫助。

1

好吧,我建議你做這樣的事情:

  1. 獨立的圖像分成不同的區域,根據不同的事情主要是照明。
  2. 然後,對於每個區域,應用閾值將重要區域(交通)與不重要區域(樹木等)分開。 (cv2.threshold
  3. 使用的輪廓,你可以從其他的東西區分車輛。(cv2.findContours和更多)

如果您有視頻或類似的東西流,你可以使用像運動檢測過。

有些鏈接可能對您有用: