* 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
错误转载于:
(另外,这个问题在 answers.opencv.org Matlab binding for cv.calcHist)
答案 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
的上半部分声明。