使用OpenCV官方Matlab绑定cv.calcHist

时间:2013-12-03 12:49:53

标签: matlab opencv mex

* OpenCV-2.4.7 \ sources \ samples \ python2 \ color_histogram.py *中的Python示例下面有warking代码

h = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )

Matlab mex绑定的相应语法是什么?

我尝试了不同的语法,例如

image = imread('coloredChips.png');
cv.imshow('main', image)
h = cv.calcHist({image}, [0 1], [], [180, 256], [0 180 0 256]);
h = cv.calcHist( image , [0 1], [], [180, 256], [0 180 0 256]);

并且每次 calcHist 调用都会出现错误

Error using calcHist cv::exception caught: ..\..\..\modules\imgproc\src\histogram.cpp:1421: 
error: (-215) nimages > 0 && dims > 0 in function cv::calcHist

错误转载于:

  1. 来自GitHub的OpenCV 3最新资源。
  2. 编译器= VS2010或VS2012。
  3. Arch = x86或x64
  4. 配置=释放
  5. Matlab的= R2013b
  6. (另外,这个问题在 answers.opencv.org Matlab binding for cv.calcHist

1 个答案:

答案 0 :(得分:1)

如果你阅读mexopencv documentation,你可以在最后找到一个例子。

im = cv.cvtColor(im,'RGB2HSV');
edges = {linspace(0,180,30+1),linspace(0,256,32+1)};
h = cv.calcHist(im(:,:,1:2), edges); 

您需要将图片转换为HSV格式。 由于您只有1个图像,因此您可以使用[0 1]作为通道,因为您在示例中可以看到,他使用与您相同的图像。 im(:,:,1:2),使用通道1和2(Matlab索引)。

之后所有[], [180, 256], [0 180 0 256]都与opencv不同。您必须将edge作为单元格数组传递,如示例所示。

修改

另外你可以看看。如果你进入mexopencv-master,你可以进入src / + cv / calcHist.cpp,在这个文件中你可以看到对OpenCV函数的调用是如何完成的。

它是这样的:

calcHist(&arrays[0], arrays.size(), &channels[0], mask, hist, dims,
            &histSize[0], &ranges_ptr[0], uniform, accumulate);

其中hist,dims,histSize,range_ptr在mexFunction的上半部分声明。