使用 OpenCV 官方 Matlab 绑定 cv.calcHist

Posted

技术标签:

【中文标题】使用 OpenCV 官方 Matlab 绑定 cv.calcHist【英文标题】:Using OpenCV official Matlab binding for cv.calcHist 【发布时间】:2013-12-03 12:49:53 【问题描述】:

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

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

错误重现于:

    来自 GitHub 的 OpenCV 3 最新资源。 编译器=VS2010 或 VS2012。 Arch=x86 或 x64 配置=发布 Matlab=R2013b

(另外,answers.opencv.org Matlab binding for cv.calcHist 上的这个问题)

【问题讨论】:

阅读 mexopencv 文档:cs.sunysb.edu/~kyamagu/mexopencv/matlab/calcHist.html. mexopencv 库(作者 Kota Yamaguchi)很棒,但不是我要问的(请参阅对您答案的评论) 【参考方案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 不同。您必须像示例中一样将边缘作为单元格数组传递。

编辑

另一件事你可以看看。如果你进入 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 的上部。

【讨论】:

您指的是 Kota Yamaguchi 编写的 mexopencv 库,但我对 Hilton Bristow (@ 987654322@answers.opencv.org/question/9487/matlab-api-for-opencv) 没关系,我的错。但正如我在编辑中所说的那样。尝试查看源代码。也许他们可以用参数做一些事情,因为 mex 返回一个 OpenCV 错误而不是 matlab 错误。

以上是关于使用 OpenCV 官方 Matlab 绑定 cv.calcHist的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 绑定中循环遍历 OpenCV Mat

什么是相当于matlab的fliplr()的opencv?

卷积:conv2 matlab 到 opencv

OpenCV - 将蒙版应用于彩色图像

为 OpenCV 编译 MATLAB 绑定

OpenCV中Matlab的filter2的等效函数