質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

422閲覧

HSV空間でのパラメータ取得について

ChaCha_MaRu

総合スコア15

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/13 05:14

k-means法にてRBG空間においての代表色3つは表示できるようにしているのですが、これをHSVでのパラメータに変えて表示したいです(紫などの色を指定する際に難しいため)
現在はRBGの範囲を指定して色を分けていたが、Hを指定することで色を区別したい。

python

1 2import cv2 3import numpy as np 4 5from matplotlib import pyplot as plt 6from sklearn import datasets 7from sklearn.cluster import KMeans 8 9 10 11# 画像を読み込む。 12img = cv2.imread("パス") 13 14# HSV に変換する。 15hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 16 17# 水色かどうかで2値化する。(水色は0、それ以外は255) 18binary = cv2.inRange(hsv, lowerb=(0, 0, 100), upperb=(180, 45, 255)) 19binary = ~binary 20 21# メディアンフィルタで端をなめらかにする。 22binary = cv2.medianBlur(binary, 7) 23 24# 輪郭抽出を実行する。 25contours, hierarchy = cv2.findContours( 26 binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE 27) 28 29for cnt in contours: 30 # ROI 領域以外をマスクする。 31 mask = np.zeros_like(img) 32 cv2.drawContours(mask, [cnt], -1, color=(255, 255, 255), thickness=-1) 33 masked = img & mask 34 35 # 色一覧 36 colors = masked.reshape(-1, 3) 37 colors = colors[(colors != 0).all(axis=1)] # 黒は除く 38 39 # k平均法でクラスタリングする。 40 k = 3 41 criteria = cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0 42 ret, label, center = cv2.kmeans( 43 colors.astype(np.float32), k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS 44 ) 45 46 # 円の中に含まれる代表色 Top3 を可視化する。 47 fig, [ax1, ax2] = plt.subplots(1, 2, figsize=(10, 5)) 48 # 各クラスに属するサンプル数を計算する。 49 height = [np.count_nonzero(label == i) for i in range(k)] 50 # 各クラスたの色を取得する。matplotlib の引数の仕様上、[0, 1] にして、(R, G, B) の順番にする。 51 rep_color = (center / 255)[:, ::-1] 52 53 # 画像を表示する。 54 ax1.imshow(cv2.cvtColor(masked, cv2.COLOR_BGR2RGB)) 55 ax1.set_axis_off() 56 57 # ヒストグラムを表示する。 58 ax2.barh(np.arange(k), height, color=rep_color, tick_label=height) 59 plt.show() 60 61 62

参考画像

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/11/13 06:42

質問はなんでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問