Ich werde auf einen Ihrer Kommentare zuerst antworten. Hier ist ein kurzes Beispiel, das zeigt, wie ein uneinheitliche Histogramm berechnen:
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);
Das Histogramm 4 x 5 Bins haben, also musste ich 5 x 6 sind Grenzen definieren. Das erste Bin für Kanal 0 speichert die Werte aus dem Intervall [0, 60], das zweite Bin speichert Werte aus dem Intervall [60, 120] und so weiter.
Wenn Sie das Argument uniform
als wahr wählen, müssen Sie nur die untere Grenze des ersten Bins und die obere Grenze des letzten Bins für jeden Kanal angeben. Der Algorithmus berechnet dann die Bereichsgrenzen, indem er diesen Bereich durch die Anzahl der Bereiche für jeden Kanal dividiert.
Ich denke, dass Sie mit allen Informationen, die ich Ihnen bisher gegeben habe, herausfinden können, wie Sie Ihr Python-Code-Snippet in C++ - Code umschreiben. :)
Ja, aber das Problem, dass es für Uniform Hist ist. Für nicht einheitliche ist es völlig unklar, wie die Funktion aufgerufen wird. Speziell für die 3. Implementierung von calcHist mit STL-Parametern. – UndeadDragon
Ich sehe keinen Beweis für opencv mit einer Implementierung für nicht einheitliche Histogramme. Will das das OP? Vielleicht sollten Sie überlegen, unseren eigenen Code für die Implementierung zu schreiben –
Es hat, ist es richtig im Header mit Funktionen und auch hier http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html. Die Frage ist auch: verwendet Python-Code uniform hist? Weil das Problem ist, dass die Ergebnisse von zwei Bildern in Python und C++ sehr unterschiedlich sind. – UndeadDragon