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++版本集一些另闢蹊徑範圍..
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++版本集一些另闢蹊徑範圍..
如果您正在尋找OpenCV的calcHist函數的C++版本,有在http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html#calchist
它顯示瞭如何申報範圍參數一個很好的教程,我認爲這是你的困惑
我會先回復你的一條評論。這裏是您展示如何計算非均勻直方圖很短的例子:
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++代碼。 :)
是的,但它是Uniform Hist的問題。對於不統一,總是不清楚如何調用函數。尤其是對於具有STL參數的calcHist的第三個實現。 – UndeadDragon
我沒有看到opencv有非均勻直方圖實現的證據。這是OP想要的嗎?也許你應該考慮編寫我們自己的代碼來實現 –
它已經在函數的頭部了,這裏也是http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html。 問題是:python代碼使用統一的hist嗎?因爲問題是python和C++中兩個圖像的結果差別很大。 – UndeadDragon