2016-08-10 3 views
1

私は自分のウェブカメラから撮影されたビデオから赤い色を検出しようとしています。以下に示す次のコード例は、コードは以下のとおりであるOpenCV Documentation. から取得され:OpenCV Pythonで赤色を検出するには?

import cv2 
import numpy as np 

cap = cv2.VideoCapture(0) 

while(1): 

    # Take each frame 
    _, frame = cap.read() 

    # Convert BGR to HSV 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 

    # define range of blue color in HSV 
    lower_blue = np.array([110,50,50]) 
    upper_blue = np.array([130,255,255]) 

    # Threshold the HSV image to get only blue colors 
    mask = cv2.inRange(hsv, lower_blue, upper_blue) 

    # Bitwise-AND mask and original image 
    res = cv2.bitwise_and(frame,frame, mask= mask) 

    cv2.imshow('frame',frame) 
    cv2.imshow('mask',mask) 
    cv2.imshow('res',res) 
    k = cv2.waitKey(5) & 0xFF 
    if k == 27: 
     break 

cv2.destroyAllWindows() 

lower_blue = np.array([110,50,50])は低い範囲ブルーHSV値を有し、行upper_blue = np.array([130,255,255])が高い範囲ブルーHSV値を有します。私はインターネット上の赤い色の値の上限と下限を探しましたが、見つけられませんでした。 OpenCVのRedのHSV値(OpenCV H値の範囲は0〜179)を誰にでも伝えることができれば非常に役に立ちます。 ありがとうございました。(アドバンス)

私は赤の範囲を見つけるために以下を実行しようとしましたが、適切な値を選ぶことができませんでした。私が試したのはこれでした(赤の場合):

>>> green = np.uint8([[[0,255,0 ]]]) 
>>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV) 
>>> print hsv_green 
[[[ 60 255 255]]] 

これはOpenCVの文書からも取られました。 OpenCV用RED COLORのRANGEを教えてください。赤のために同じコードを実行

+1

参照[この質問](http://stackoverflow.com/questions/21737613/image-of-hsv- color-wheel-for-opencv) - そこにカラーホイールを使用し、値(0〜360の範囲)を分けて、色相値を確認することができます。 [こちらの例](https://solarianprogrammer.com/2015/05/08/detect-red-circles-image-using-opencv/)もご覧ください。あなたの質問に簡単に答えるために、赤は0と180の値の周りにあります(色が "ラップアラウンド"するため) –

+0

[OpenCVの赤色の検出がより良い?](http://stackoverflow.com/questions/32522989/opencv-赤色の検出が良い) – Miki

+0

S値とV値を取得するにはどうすればよいのか分かりません。説明していただけますか?ありがとうございます(事前に)! @Miki – Omee

答えて

2

が動作しているようです:

>>> red = numpy.uint8([[[0,0,255]]]) 
>>> hsv_red = cv2.cvtColor(red,cv2.COLOR_BGR2HSV) 
>>> print(hsv_red) 
[[[ 0 255 255]]] 

そして、あなたは赤みがかっを出現異なる色を試すことができます。赤色の範囲が179よりもわずかに小さい両方とも0よりわずかに大きい数字と数字(例えば[[[176 255 255]]][[[ 4 255 255]]]red = numpy.uint8([[[31,0,255]]])一方結果でred = numpy.uint8([[[0,31,255]]])結果を含むことに注意してください。

+0

[doc](http://opencv-python-tutroals.readthedocs.io/ja/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html#how-to-find-hsv-values-to-track )を上にリンクしたサイトから取得するには、 '[[[0 255 255]]]'という値を持っていて、短い方程式に接続してその色の上限と下限を取得します。 "[H-10,100,100]'と '[H + 10,255,255]'をそれぞれ下限と上限として取ります。これは '[0、100、100]'の下限と赤の上限['10,255,255]を残しますが、より良い範囲のために' 20 'にすることができます。 –

+0

ありがとう!それは完全に動作します! @StevenCorreia – Omee

0

ここでは6列パラメータを選択することによって、必要な色を決定するためのプログラムです。 (OpenCVの3.2の作業)。 あなたの画像や「色の範囲バレ」の入力画像を選択し、あなたがカーソルを移動すると値があなたの色を分離する必要があるものですするアレイか見る! Color range program screen pic

はここにコードがあります:(ビデオ入力にも簡単に対応できます) image.jpg - >(あなたの画像) color_bar.jpg - >(あなただけのウィンドウを表示したい任意の画像は、何かをしてみてください)

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 

def nothing(x): 
    pass 

def main(): 

    window_name='color range parameter' 
    cv2.namedWindow(window_name) 
    # Create a black image, a window 
    im = cv2.imread('image.jpg') 
    cb = cv2.imread('color_bar.jpg') 
    hsv = cv2.cvtColor(im,cv2.COLOR_BGR2HSV) 

    print ('lower_color = np.array([a1,a2,a3])') 
    print ('upper_color = np.array([b1,b2,b3])') 


    # create trackbars for color change 
    cv2.createTrackbar('a1',window_name,0,255,nothing) 
    cv2.createTrackbar('a2',window_name,0,255,nothing) 
    cv2.createTrackbar('a3',window_name,0,255,nothing) 

    cv2.createTrackbar('b1',window_name,150,255,nothing) 
    cv2.createTrackbar('b2',window_name,150,255,nothing) 
    cv2.createTrackbar('b3',window_name,150,255,nothing) 

    while(1): 
     a1 = cv2.getTrackbarPos('a1',window_name) 
     a2 = cv2.getTrackbarPos('a2',window_name) 
     a3 = cv2.getTrackbarPos('a3',window_name) 

     b1 = cv2.getTrackbarPos('b1',window_name) 
     b2 = cv2.getTrackbarPos('b2',window_name) 
     b3 = cv2.getTrackbarPos('b3',window_name) 

     # hsv hue sat value 
     lower_color = np.array([a1,a2,a3]) 
     upper_color = np.array([b1,b2,b3]) 
     mask = cv2.inRange(hsv, lower_color, upper_color) 
     res = cv2.bitwise_and(im, im, mask = mask) 

     cv2.imshow('mask',mask) 
     cv2.imshow('res',res) 
     cv2.imshow('im',im) 
     cv2.imshow(window_name,cb) 

     k = cv2.waitKey(1) & 0xFF 
     if k == 27:   # wait for ESC key to exit 
      break 
     elif k == ord('s'): # wait for 's' key to save and exit 
      cv2.imwrite('Img_screen_mask.jpg',mask) 
      cv2.imwrite('Img_screen_res.jpg',res) 
      break 


    cv2.destroyAllWindows() 


#Run Main 
if __name__ == "__main__" : 
    main() 
関連する問題