C ++中该函数的完全类比是什么?
# img, channels, mask, bins for each channel, ranges for each channel
hist2 = cv2.calcHist([img2], [0, 1, 2], None, [32, 32, 32],
[50, 256, 50, 256, 50, 256])
由于C接口,我无法理解它。 C ++版本中的范围以另一种方式设置..
答案 0 :(得分:1)
我会先回复你的一条评论。这是一个简短的例子,向您展示如何计算非均匀直方图:
using namespace std;
using namespace cv;
Mat img = imread("Lenna.png", IMREAD_COLOR);
int channels[] = { 0, 1 };
Mat histogram;
int hist_size[] = { 4, 5 };
float range_0[] = { 0.0f, 60.0f, 120.0f, 180.0f, 255.0f };
float range_1[] = { 0.0f, 50.0f, 100.0f, 150.0f, 200.0f, 255.0f};
const float* all_ranges[] = { range_0, range_1 };
calcHist(&img, 1, channels, Mat(), histogram, 2, hist_size, all_ranges, false);
直方图将有4 x 5个bin,因此我必须定义5 x 6 bin边界。通道0的第一个bin将存储区间[0,60]的值,第二个bin将存储区间[60,120]的值,依此类推。
如果选择uniform
参数为true,则只需为每个通道指定第一个bin的下边界和最后一个bin的上边界。然后,算法通过将此范围除以每个通道的区间数来计算区间边界。
我认为,到目前为止,我已经提供了所有信息,您应该能够弄清楚如何将Python代码段重写为C ++代码。 :)
答案 1 :(得分:0)
如果您正在寻找opencv calcHist函数的C ++版本,那么http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html#calchist
就有一个很好的教程它显示了如何声明范围参数,我认为这是你的困惑