PythonのOpenCV4楽しいアプリケーションシリーズ(4)---リアルタイムに検出されたオブジェクトの色

今日、我々は、三原色のビデオオブジェクトを有する以下に示すように、我々は唯一の、赤と緑の球状物体を検出し、オブジェクトインスタンスの小さい色のリアルタイム検出を達成するためにビデオを持っています。

ビデオ(またはカメラ)を開くために必要な最初のステップ:

キャップ= cv2.VideoCapture( '1.mp4') #ビデオファイル開く
#キャップ= cv2.VideoCapture(0)#オープンUSBカメラを

サイクルは、その後、フレーム、色物体検出を取る必要があります。、閾値は次の表のキーHSV、HSV色に設定されているカラーフィルタの閾値を用いて物体の検出HSV色が一般的に使用されます。

しかし、絵はまた、次のされているように、我々はHSVのしきい値を使用し、赤と緑の上の写真のように、画像上のターゲットの小さなHSV値を抽出するために、独自のテイクを書くための特定のツール、し、手動で設定した閾値を、必要とします:

lower_green = np.array([35、110 、106])# 緑色の範囲の低閾値
upper_green = np.array([77、255 、255])# 高しきい値の緑色範囲

lower_red = np.array([0、127 、128 ])#赤色の範囲の低閾値
upper_red = np.array([10、255 、255])# 高い閾値赤色領域

次のステップは、フィルタリング処理、輪郭抽出であり、色がputText関数でマークしながら、最終的な結果は、長方形のボックスオブジェクトの検出を示す表され、完全なコードと、最終結果は次の通りである:
完全なコード:

# - * -コーディング:CP936 - * - 
インポートnumpyのAS NP 

インポートCV2 

フォント= cv2.FONT_HERSHEY_SIMPLEX 

lower_green np.array =(35、110、106])#緑色の範囲の低閾値
upper_green = np.array([77、255高閾値の、255])#緑色範囲

lower_red = np.array([0、127 、128])# 赤色の範囲の低閾値
upper_red = np.array([10、255 、255])# 高い閾値赤色域

キャップ= CV2 .VideoCapture( '1.mp4')#ビデオファイル開く
#キャップ= cv2.VideoCapture(0)#オープンUSBカメラを


(cap.isOpened())場合:#ビデオのオープンが成功した
    のフラグを1 =。
他:
    中フラグ= 0 

NUM = 0 
(内のフラグ)がある場合:
    しばらく(真):
        RET、フレーム= cap.read()は、#の読み込み
        (フレームなしではありません)のIF番号:
        IF RET == FALSE:#リーディングフレームは、失敗した
            休憩を
        = cv2.cvtColor hsv_img(フレーム、cv2.COLOR_BGR2HSV)
        mask_green = cv2.inRange(hsv_img、lower_green、upper_green)#穿刺範囲から選択された色に応じ
        mask_red = cv2.inRange(hsv_img、lower_red、 upper_red)#の穿刺の範囲から選択された色に応じ
        mask_green = cv2.medianBlur(mask_green、7)#メディアンフィルタ
        mask_red = cv2.medianBlur(mask_red、7) #メディアンフィルタ
        マスク= cv2.bitwise_or(mask_green、mask_red)
        cv2.imshow( 'mask_green'、mask_green)
        cv2.imshow( 'mask_red' mask_red)
        cv2.imshow( 'マスク'、マスク) 
        輪郭におけるCNTのための:
            (X、Y、W、H) = cv2.boundingRect(CNT) 
        mask_green、輪郭、cv2.findContours =階層(mask_green、cv2.RETR_EXTERNAL、cv2.CHAIN_APPROX_NONE)
        mask_red、contours2、hierarchy2 = cv2.findContours(mask_red、cv2.RETR_EXTERNAL、cv2.CHAIN_APPROX_NONE)

            cv2.rectangle(フレーム、(X、Y)、(X + Y +のH)、(0、255、255)、W、 2)
            cv2.putText(フレーム、 "緑色"、(X、Y - 5)、フォント、0.7、(0、255、0)、2)

        contours2でCNT2のための:
            (X2、Y2、W2、H2)= CV2 .boundingRect(CNT2)
            cv2.rectangle(フレーム、(X2、Y2)、(X2 + W2、Y2 + H2)、(0、255、255)、2)
            cv2.putText(フレーム、 "赤"、(X2、 Y2 - 5)、フォント、0.7、(0、0、255)、2)
        NUM = NUM + 1 
        cv2.imshow( "結果"、フレーム)
        cv2.imwrite( "IMGS /%のD.JPG" %のNUM、フレーム)

        cv2.waitKey(20)&0xFFで== 27の場合:#Escキーを押して終了に
            ブレーク
 
cv2.waitKey(0)

cv2.destroyAllWindows()

正味の効果アニメーション:

[OpenCVの深さの関心と学習AI]学習の詳細については、

長押しやフォローに次のQRコードをスキャン

  

  

おすすめ

転載: www.cnblogs.com/stq054188/p/11883916.html