Pythonベースのopencv画像処理により、ゼブラ交差の検出が実現します。

基本的な考え方

ゼブラ交差検出は、opencv画像処理を使用してグレー値変換、ガウスフィルターノイズ除去、しきい値処理、腐食および膨張を使用して、車両と歩行者の位置、および車の速度に達したときのそれらの間の距離情報を判断することにより、画像の輪郭検出を実行します。一定のしきい値を超えて歩行者に近づくと、車両は失礼な歩行者と判断されます。

結果の例

実験プロセス

最初にビデオから写真を撮ってテストし、満足のいく結果が得られたら、それをビデオにネストして目的の効果を実現します。

1.前処理(グレー値変換、ガウスフィルターノイズ除去、しきい値処理、腐食および膨張)>ニーズに応じていくつかの値を変更します


#グレー値変換imgGray = cv2.cvtColor(copy_img、cv2.COLOR_BGR2GRAY)#ガウス
フィルターノイズ除去
imgBlur = cv2.GaussianBlur(imgGray、(5,5)、0)
#しきい値
処理ret、thresh = cv2.threshold(imgBlur 、127255、cv2.THRESH_BINARY) 腐食
imgEro = cv2.erode(THRESH、kernel1、反復= 2) 拡張
imgDia = cv2.dilate(imgEro、kernel2、反復= 4)

前処理後(下図を参照):


2.輪郭検出

#轮廓检的
_、contouts、hie = cv2.findContours(imgDia、cv2.RETR_TREE、cv2.CHAIN_APPROX_NONE)
cnt = contouts 
cv2.drawContours(copy_img、cnt、-1、(0、255、0)、2)

完全な概要(以下に示す)

これは私たちが望んでいることではないことがわかるので、場所を判断し、関心のある地域を選択する必要があります。

3.関心のある地域

自分の写真やビデオのニーズに応じて、x、y、w、hの位置情報値を変更します。

for i in cnt:
    #座標
    割り当てx、y、w、h = cv2.boundingRect(i)
    #roi位置判定
    y> 350かつy <450およびx <1200およびw> 50かつh> 10の場合:
        #描画輪郭
        cv2.drawContours(copy_img、i、-1、(0、255、0)、2)

roiを取得した後の完全な結果(下の図に示すように)


4.完全なコード

import cv2 
import numpy as np 
#define two cores(kernel_Eroは腐食に使用され、kernel_Diaは拡張に使用されます)
kernel_Ero = np.ones((3,1)、np.uint8)
kernel_Dia = np.ones((3,5)、 np.uint8)

img = cv2.imread( "../ images / bmx.png")
copy_img = img.copy()#元の
画像のコピー変更サイズ
copy_img = cv2.resize(copy_img、(1600,800))
#灰度値変換
imgGray = cv2.cvtColor(copy_img、cv2.COLOR_BGR2GRAY)#ガウス
フィルターノイズ除去
imgBlur = cv2.GaussianBlur(imgGray、(5,5)、0)
#しきい値
処理ret、thresh = cv2.threshold(imgBlur、127,255) 、cv2.THRESH_BINARY)
#腐食
imgEro = cv2.erode(Thresh、kernel_Ero、Iterations = 2)
#展開
imgDia = cv2.dilate(imgEro、kernel_Dia、反復= 4)
 
#輪郭検出
_、contouts、HIE = cv2.findContours(imgDia、cv2.RETR_TREE、cv2.CHAIN_APPROX_NONE)
CNT = contouts 

CNTにおけるiについて:
    #坐标赋值
    H = cv2.boundingRect(I)中、W、X、Y、
    #roi位置判断
    する場合y> 350およびy <450およびx <1200およびw> 50およびh> 10:
        #画出轮廓
        cv2.drawContours(copy_img、i、-1、(

0、255、0 )、2)cv2.imshow( " img "、copy_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

総括する

ビジネス要件では、このプロセスの結果は実現可能ではなく、必要なものをフレーム化するだけですが、車両が交通現場の歩行者に礼儀正しいかどうかを判断する場合は、座標を判断する必要があります。最初のゼブラ交差点の座標から最後のゼブラ交差点の座標(水平)まで大きな長方形のフレーム(ロイ領域)を描き、長方形のフレームの座標に従って自動車の座標(既存の座標)に作用します要求を満たすために、判断してください。

やっと!

opencvとの最初の接触!だから私にスプレーしないでください、視覚分野の大物!(/狗头)
 
コード量は非常に少なく、一般化能力はなく、アプローチは非常に少ないです。しかし、私にとって、opencvを学ぶことはまだ非常に役に立ちます!それでおしまい!Ollieはそれを与える!

完全なプロジェクトコードを入手⬅ここで入手

 

おすすめ

転載: blog.csdn.net/weixin_43881394/article/details/109095656