【问题标题】:Opencv Clustering On More Than 4 Channels超过 4 个通道的 Opencv 聚类
【发布时间】:2012-05-09 18:09:35
【问题描述】:

我正在尝试在 opencv 库 (kmeans2) 中应用 kmeans 聚类算法,但每个样本点的值超过 4 个 (超过 4 个功能)

当我尝试使用 cvMat 为 kmeans2 准备参数时,每当我打印或为其分配任何值时都会引发异常。

这是我尝试过的两种方法

第一种方法

import cv
from numpy import *
a = zeros([20,1,6])
b = cv.fromarray(a)
print b[0,0]
OpenCV Error: One of arguments' values is out of range (The number of channels must be 1, 2, 3 or 4) in cvRawDataToScalar, file /build/buildd/opencv-2.3.1/modules/core/src/array.cpp, line 1531
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cv2.error: The number of channels must be 1, 2, 3 or 4

第二种方法

import cv
from numpy import *
a = cv.CreateMat(20,1,cv.MAKETYPE(cv.CV_32F,6))
print a[0,0]
OpenCV Error: One of arguments' values is out of range (The number of channels must be 1, 2, 3 or 4) in cvRawDataToScalar, file /build/buildd/opencv-2.3.1/modules/core/src/array.cpp, line 1531
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cv2.error: The number of channels must be 1, 2, 3 or 4

为 kmeans 算法创建和操作 cvMat 参数的正确方法是什么?

【问题讨论】:

  • 虽然我对 opencv python 接口一无所知,但在这两种情况下,您都有一个 20 x 1 x 6 矩阵,这意味着您的通道数是 6,所以它不起作用?
  • 不,它不起作用,虽然我可以创建超过 4 个通道的矩阵,但它们不适用于 kmeans... 解决方案是创建一个通道但宽度(没有cols) == 特征

标签: python opencv numpy k-means


【解决方案1】:

您所犯的错误是形成错误维度的矩阵。改变这个

a = zeros([20,1,6])

到这里

a = zeros([20,6,1])

还有这个

a = cv.CreateMat(20,1,cv.MAKETYPE(cv.CV_32F,6))

到这里

a = cv.CreateMat(20, 6, cv.CV_32F)

您似乎误解了文档

samples – 输入样本的浮点矩阵,每个样本一行。

在每一列中你都有特征。

【讨论】:

  • 我没有误解文档,我尝试了该解决方案但没有奏效,但原因是某些功能具有导致一些错误的 nan 值,修复后它可以工作,谢谢跨度>
  • 我正在关注该教程stackoverflow.com/a/8813320/37980 这让我相信我必须使用特征向量的通道
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
相关资源
最近更新 更多