Opencvで画像の中から黒以外の最頻色を抽出して、BGR+-10の範囲の色をinRangeで切り取りたいと思っております。
所々省略してますが、以下のようなコードになります。
Python
1import numpy as np 2import cv2 3from scipy import stats 4img = cv2.imread(filepath) 5img2 = np.copy(img) 6......... 7.............. 8img2 = img2.reshape(-1,3) 9.............. 10......... 11mode_bgr = stats.mode(img2[~np.all(img2 == [0,0,0], axis=-1)])[0].squeeze() 12#この時点でmode_bgrには画像の最頻色(黒を除く)が [int 0-255 , int 0-255, int 0-255] の形で入っていることを確認しました。 13min_bgr = mode_bgr - 20 14max_bgr = mode_bgr + 20 15min_bgr[min_bgr<0] = 0 16max_bgr[max_bgr>255] = 255 17img_binary = cv2.inRange(img, tuple(min_bgr),tuple(max_bgr))
それでこの部分でエラーが表示されます。
img_binary = cv2.inRange(img, tuple(min_bgr),tuple(max_bgr))
TypeError: Expected Ptrcv::UMat for argument 'lowerb'
min_bgr<max_bgrとなっており、imgも正常に読み込まれていることを確認済みです。
どこが間違っているかご指摘願えないでしょうか。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー