使用 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的主要内容,如果未能解决你的问题,请参考以下文章