

python3.6.1 opencv3

[code]

    flags=cv2.KMEANS_RANDOM_CENTERS
    retval, bestLabels, codebook=cv2.kmeans(features,self.codebookSize,None,term_crit,iterMax,flags)
    self.classifier.train(codebook,np.arry(range(self.codebookSize)))
    
[/code]

[code]

    codebook=cv2.kmeans(features,self.codebookSize,None,term_crit,iterMax,flags)
    type error: data data type = 17 is not supported
    
[/code]

cv2.kmeansのパラメータはあっている気がするのですが、どうやってエラーを回避すればよいのでしょうか、お教えいただければ幸いです。


CC BY-SA 3.0
2017-08-03T07:04:02.410
36896
2018-01-05T10:35:46.863
2017-09-09T13:53:58.597
49
24713
question
opencv python3
python type error: data data type = 17 is not supported


OpenCV において `data type = 17` というのは、`CV_8SC3` 型である、つまり、符号付き 8bit char
が3チャネルあることを表しています。

対して [`cv2.kmeans`
のドキュメント](http://docs.opencv.org/3.2.0/d5/d38/group__core__cluster.html#ga9a34dc06c6ec9460e90860f15bcd2f88)によると、この関数の引数
`data` として許容されている行列要素の型は `CV_32F` か `CV_32FC2` のいずれかです。したがって、今回のプログラムだと変数
`features` の型をこのどちらかに合わせる必要があります。`features.shape` や `features.dtype`
を用いて行列の形と要素の型を確認してみてください。

### 参考

  * データ型の番号と実際の型の対応表 
    * [LIST OF MAT TYPE IN OPENCV](http://ninghang.blogspot.jp/2012/11/list-of-mat-type-in-opencv.html) \-- Vision Life
    * [A raw Mat::type in a debugger](https://stackoverflow.com/a/39780825/5989200) \-- 本家 Stack Overflow における [empty](https://stackoverflow.com/users/1637126/empty) さんの投稿
  * [`cv::kmeans` のドキュメント](http://docs.opencv.org/3.2.0/d5/d38/group__core__cluster.html#ga9a34dc06c6ec9460e90860f15bcd2f88) \-- OpenCV 3.2.0


CC BY-SA 3.0
2017-08-03T09:44:33.180
36899
2017-08-03T09:54:35.127
2017-08-03T09:54:35.127
19110
19110
36896
answer