OpenCV C ++模拟Python方法

时间:2017-02-22 17:31:20

标签: python c++ opencv

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 ++版本中的范围以另一种方式设置..

2 个答案:

答案 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

就有一个很好的教程

它显示了如何声明范围参数,我认为这是你的困惑