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
となりました。
タグにOpenCVを追加してください。
また、どのようなルールの下で変換するおつもりなのか追記してください。

int8(3ch)からfloat32(2ch)、floatにしてから/255とかだと思ったのですがch数が違うのはどうするんでしょうか...(私も気になります)
一般的な色削減でkmeansを使う場合は、チャネル数を変更する必要はないように思えます。やりたいこと+実際のコードを提示されると回答得られやすいと思います。
差支えない範囲で、第三者が再現できるコード、具体的にはself.codebookSize, term_crit, iterMax, flagsの具体的な値が分かるようなコードを追記いただけますか?
