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

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

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

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1182閲覧

画像にどんな色が使われているのかの調査

oonya

総合スコア5

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/21 16:49

###実現したいこと
入力された画像をk-means法で減色し画像に使われている色を抽出したいです。
例えば下の画像なら(48, 153, 233), (65, 192, 134), (114, 98, 218), (192, 188, 65)を出力したいです。
イメージ説明

###発生している問題
入力する画像が上の画像なら正常に動作するのですが画像によってはエラーが発生してしまいます。

該当のソースコード

python

1import numpy as np 2import cv2 3from matplotlib import pyplot as plt 4 5img = cv2.imread('tree.jpg') 6 7# マスキングして白の背景を取り除く 8gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 9threshold_value = 200 10ret, threshold_img = cv2.threshold(gray, threshold_value, 255, cv2.THRESH_BINARY) 11threshold_img = ~threshold_img 12masked_img = cv2.cvtColor(threshold_img, cv2.COLOR_GRAY2BGR) 13img = masked_img & img 14 15 16# メディアンフィルタで端をなめらかにする。 17threshold_img = cv2.medianBlur(threshold_img, 7) 18 19# 輪郭抽出を実行する。 20contours, hierarchy = cv2.findContours( 21 threshold_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE 22) 23 24for cnt in contours: 25 mask = np.zeros_like(img) 26 cv2.drawContours(mask, [cnt], -1, color=(255, 255, 255), thickness=-1) 27 masked = img & mask 28 29 colors = masked.reshape(-1, 3) 30 colors = colors[(colors != 0).all(axis=1)] 31 32 k = 1 33 criteria = cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0 34 ret, label, center = cv2.kmeans( 35 colors.astype(np.float32), k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS 36 ) 37 38 # 画像を表示する。 39 ax1.imshow(cv2.cvtColor(masked, cv2.COLOR_BGR2RGB)) 40 ax1.set_axis_off() 41 42 print("center", center)

#####使用画像
イメージ説明

発生するエラー

center [[113.]] --------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-19-37cc64ede3fd> in <module>() 34 criteria = cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0 35 ret, label, center = cv2.kmeans( ---> 36 colors.astype(np.float32), k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS 37 ) 38 error: OpenCV(4.1.2) /io/opencv/modules/core/src/kmeans.cpp:241: error: (-2:Unspecified error) in function 'double cv::kmeans(cv::InputArray, int, cv::InputOutputArray, cv::TermCriteria, int, int, cv::OutputArray)' > Number of clusters should be more than number of elements (expected: 'N >= K'), where > 'N' is 0 > must be greater than or equal to > 'K' is 1

補足

Colaboratoryで特になにもカスタムなどせず上記を動かしています。
エラー以外でもここの処理はこうした方がいい、みたいのがあったら指摘してくださると嬉しいです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問