2017-02-22 63 views
0

C++中該函數的完全模擬是什麼?OpenCV C++ Python方法模擬

# 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

如果您正在尋找OpenCV的calcHist函數的C++版本,有在http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html#calchist

它顯示瞭如何申報範圍參數一個很好的教程,我認爲這是你的困惑

+0

是的,但它是Uniform Hist的問題。對於不統一,總是不清楚如何調用函數。尤其是對於具有STL參數的calcHist的第三個實現。 – UndeadDragon

+0

我沒有看到opencv有非均勻直方圖實現的證據。這是OP想要的嗎?也許你應該考慮編寫我們自己的代碼來實現 –

+0

它已經在函數的頭部了,這裏也是http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html。 問題是:python代碼使用統一的hist嗎?因爲問題是python和C++中兩個圖像的結果差別很大。 – UndeadDragon

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×5箱,所以我必須確定5×6箱邊界。通道0的第一個倉將存儲來自區間[0,60)的值,第二個倉將存儲區間[60,120)中的值,依此類推。

如果您選擇uniform參數爲true,則只需爲每個通道指定第一個箱的下邊界和最後一個箱的上邊界。該算法然後通過將該範圍除以每個通道的箱數來計算箱邊界。

我認爲,到目前爲止,我已經提供給你的所有信息,你應該能夠弄清楚如何將你的Python代碼片段改寫成C++代碼。 :)