次の画像について考えてみます。
これは、トラフィックのビデオ映像からのフレームです。
私がやりたいのは、対向するトラフィックだけを切り取って分析することです。特定の座標を提供することで、たとえばポリゴンを抽出できる高速で効率的な方法が必要です。
私はOpenCVとPythonに取り組んでいます。
編集:
私が見る1つのオプションは、画像をNumpy配列として扱い、forループを使用して特定の要素を抽出することですが、それは効率的ではなく、それが適切なことかどうかわかりません。
次の画像について考えてみます。
これは、トラフィックのビデオ映像からのフレームです。
私がやりたいのは、対向するトラフィックだけを切り取って分析することです。特定の座標を提供することで、たとえばポリゴンを抽出できる高速で効率的な方法が必要です。
私はOpenCVとPythonに取り組んでいます。
編集:
私が見る1つのオプションは、画像をNumpy配列として扱い、forループを使用して特定の要素を抽出することですが、それは効率的ではなく、それが適切なことかどうかわかりません。
輪郭を使用して、関心のある領域(任意の形状)を抽出することをお勧めします。このドキュメントを参照してください:輪郭の描画
アプローチは次のようになります。
サンプルコード:
#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()
アルゴリズムのバージョンを提案できます。
これがお役に立てば幸いです。
さて、私はあなたが次のようなことをすることを提案します:
cv2.threshold
)cv2.findContours
およびその他)ビデオのストリームなどがある場合は、モーション検出なども使用できます。
あなたが役に立つと思うかもしれないいくつかのリンク: