考慮以下圖像的形狀的子圖像:提取多邊形
這是從業務的視頻鏡頭的幀。
我想要做的是隻剪出即將到來的流量並分析它。我想要一個快速高效的方法,通過提供某些座標,我可以提取多邊形等。
我正在研究OpenCV和Python。
編輯:
一個選擇我看到的是處理圖像numpy的數組,並使用for循環中提取某些元素,但不會是有效的,我不知道,如果它的正確的事情。
考慮以下圖像的形狀的子圖像:提取多邊形
這是從業務的視頻鏡頭的幀。
我想要做的是隻剪出即將到來的流量並分析它。我想要一個快速高效的方法,通過提供某些座標,我可以提取多邊形等。
我正在研究OpenCV和Python。
編輯:
一個選擇我看到的是處理圖像numpy的數組,並使用for循環中提取某些元素,但不會是有效的,我不知道,如果它的正確的事情。
我會建議使用輪廓提取您感興趣的區域(任何你想要的形狀)。 請參閱本文檔:Drawing Contours
你的方法應該如下:
示例代碼:
#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()
謝謝!解決了它 – md1hunox 2013-03-16 15:47:09
我可以提出一個版本的算法:
希望這會有所幫助。
好吧,我建議你做這樣的事情:
cv2.threshold
)cv2.findContours
和更多)如果您有視頻或類似的東西流,你可以使用像運動檢測過。
有些鏈接可能對您有用:
@Schoolboy對不起,更新的問題 – md1hunox 2013-03-14 08:04:26