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

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

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

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

Python 3.x

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

Q&A

1回答

20635閲覧

pythonで画像のbit深度を変換する方法とは

bof

総合スコア18

OpenCV

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

Python 3.x

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

0グッド

1クリップ

投稿2017/08/04 23:57

編集2017/08/06 06:59

pythonで画像のbit深度を変換する方法を教えていただきたいです。
例えば、CV_8SC3からCV_32FC2に変換するにはどうしたらよいのでしょうか?

featuresという変数をcv2.kmeansにdataとして使った際にCV_32FC2に変換する必要があり、データの型だけ変換したいと考えています。

目的は、画像のクラスタリングをbag of featuresで行うことです。その際にk-meansで、画像の特徴を分類しようとして、エラーが出ました。

コード

retval, bestLabels, codebook=cv2.kmeans(features, self.codebookSize, None, term_crit, iterMax, flags)

エラーコード

TypeError: data data type = 17 is not supported

data type=17がCV_8SC3にあたり、これをCV_32Fまたは、CV_32FC2に変える必要があります。

print(self.codebookSize,term_crit,iterMax,flags)

より、self.codebookSize,term_crit,iterMax,flags = 15 (3, 10, 1) 100 0
となりました。

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

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

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

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

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

LouiS0616

2017/08/05 00:40

タグにOpenCVを追加してください。
LouiS0616

2017/08/05 00:41

また、どのようなルールの下で変換するおつもりなのか追記してください。
退会済みユーザー

退会済みユーザー

2017/08/05 12:56

int8(3ch)からfloat32(2ch)、floatにしてから/255とかだと思ったのですがch数が違うのはどうするんでしょうか...(私も気になります)
can110

2017/08/06 05:00

一般的な色削減でkmeansを使う場合は、チャネル数を変更する必要はないように思えます。やりたいこと+実際のコードを提示されると回答得られやすいと思います。
can110

2017/08/06 06:42

差支えない範囲で、第三者が再現できるコード、具体的にはself.codebookSize, term_crit, iterMax, flagsの具体的な値が分かるようなコードを追記いただけますか?
guest

回答1

0

元データの縦横2次元画像をreshape((-1,3))で1列にしてnp.float32()すればよいかと思います。
参考:OpenCVのK-Meansクラスタリング

Python

1# kmeans 2# http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_ml/py_kmeans/py_kmeans_opencv/py_kmeans_opencv.html 3import numpy as np 4import cv2 5 6img = cv2.imread('lena.png', cv2.IMREAD_COLOR) 7features = img.reshape((-1,3)) # 1列に 8 9# convert to np.float32 10features = np.float32(features) 11 12# define criteria, number of clusters(K) and apply kmeans() 13(codebookSize,term_crit,iterMax,flags) = (15, (3, 10, 1), 100, 0) 14retval, bestLabels, codebook=cv2.kmeans(features, codebookSize, None, term_crit, iterMax, flags) 15 16# Now convert back into uint8, and make original image 17codebook = np.uint8(codebook) 18res = codebook[bestLabels.flatten()] 19res2 = res.reshape((img.shape)) 20 21cv2.imwrite('res2.png',res2) 22cv2.imshow('res2',res2) 23cv2.waitKey(0) 24cv2.destroyAllWindows()

イメージ説明

投稿2017/08/07 01:11

can110

総合スコア38262

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問