我想在 RGB 颜色空间中从图像提取特征到 3D 直方图。我有以下 python 代码,我想在 C++ 下执行它:
hist = cv2.calcHist([image], [0, 1, 2], None, self.bins, [0, 256, 0, 256, 0, 256])
hist = cv2.normalize(hist)
return hist.flatten()
我做了这样的事情:
float range[] = { 0, 255 } ;
const float* histRange = { range };
int channels[] = {0};
cv::calcHist( &image, 1, channels, cv::Mat(), r_hist, 1, &sizeVector[0], &histRange);
channels[0] = 1;
cv::calcHist( &image, 1, channels, cv::Mat(), g_hist, 1, &sizeVector[0], &histRange);
channels[0] = 2;
cv::calcHist( &image, 1, channels, cv::Mat(), b_hist, 1, &sizeVector[0], &histRange);
但后来我发现它们不一样,因为在 python 中直方图是基于 3D 计数的,如何将代码转换为 c++?
最佳答案
这是来自 OpenCv 文档的代码示例:
这里的做法是先拆分三个 channel ,然后计算每个 channel 的直方图。
对于 3D 直方图,请引用这个答案:
关于python - 如何通过opencv生成RGB直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721538/