画像のある色を指定して、その色だけ取り出したいたいです。
色の指定の仕方はRGBそれぞれの最小値・最大値を与えて、その範囲内にある色のみを表示するというやり方です。
そして、その最小値と最大値の指定は画像にトラックバーを表示し、画像の変化を見ながら調整したいです。そのトラックバーが動かなくて困っています。
python
1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4%matplotlib inline 5 6img1 = cv2.imread("camera_sample/1.jpg" ) 7 8cv2.namedWindow("OpenCV Window") 9 10def onTrackbar(position): 11 global threshold 12 threshold = position 13 14# トラックバーの生成 15cv2.createTrackbar("R_min", "OpenCV Window", 0, 255, onTrackbar) 16cv2.createTrackbar("R_max", "OpenCV Window", 128, 255, onTrackbar) 17cv2.createTrackbar("G_min", "OpenCV Window", 0, 255, onTrackbar) 18cv2.createTrackbar("G_max", "OpenCV Window", 128, 255, onTrackbar) 19cv2.createTrackbar("B_min", "OpenCV Window", 0, 255, onTrackbar) 20cv2.createTrackbar("B_max", "OpenCV Window", 128, 255, onTrackbar) 21 22 23while True: 24 r_min = cv2.getTrackbarPos("R_min", "OpenCV Window") 25 r_max = cv2.getTrackbarPos("R_max", "OpenCV Window") 26 g_min = cv2.getTrackbarPos("G_min", "OpenCV Window") 27 g_max = cv2.getTrackbarPos("G_max", "OpenCV Window") 28 b_min = cv2.getTrackbarPos("B_min", "OpenCV Window") 29 30 31# inRange関数で範囲指定2値化 -> マスク画像として使う 32 mask_image = cv2.inRange(img1, (b_min, g_min, r_min), (b_max, g_max, r_max)) # BGR画像なのでタプルもBGR並び 33 34# bitwise_andで元画像にマスクをかける -> マスクされた部分の色だけ残る 35 result_image = cv2.bitwise_and(img1, img1, mask=mask_image) # BGR画像 AND BGR画像 なので,自分自身とのANDは何も変化しない ->マスクだけ効かせる 36 37# (X)ウィンドウに表示 38 cv2.imshow('OpenCV Window', result_image) 39 40 if cv2.waitKey(10)==27: 41 break 42 43 44cv2.destroyAllWindows() 45cv2.waitKey(1)
トラックバー付きの画像(ウィンドウ)は表示されるのですが、その動きがほぼ固まっています。
トラックバーを一つだけにすると比較的動き、画像の色も変わリます。
ですが、2つ以上だとトラックバーが動きません。
何が原因なのでしょうか..?
よろしくお願いいたします。
あなたの回答
tips
プレビュー