OpenCV - Verwirrung mit calcHist

Ich habe die Dokumentation für calcHist () oft gelesen, aber ich glaube, dass meine Unerfahrenheit mit OpenCV und meine verrosteten Programmierkenntnisse mich völlig daran hindern, sie zu verstehen.

Ich möchte Pixel in einem Kanal eines HSV-Bilds (Farbton oder Kanal [0]) für Segmentierungszwecke zählen, wobei 10 Bins verwendet werden, die sich farblich annähern (verwenden wir dies als Beispiel, ich habe die Bereiche gestohlen) das Web - fwiw, es scheint falsch, lila-rot wegzulassen):

Rot: 0-19 & 330-360 Rot-Gelb (RY): 20-49 Gelb: 50-69 YG: 70-84 Grün: 85-170 GB: 171-191 Blau: 192-264 BP: 265-289 Lila : 290 & ndash; 329

Und so weiter...

Wie mache ich das mit calcHist?

Ich bin so weit wie:

#include <opencv2/opencv.hpp>
#include <vector>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    Mat scene, sceneHSV, dest, histo;
    int numImages = 1, histChannel[] = {0}, dims = 1, histSize[] = {10};

    float redRange[] = {0, 10};
    float roRange[] = {10, 25};
    float orangeRange[] = {25, 35};
    float oyRange[] = {35, 42};
    float yellowRange[] = {42, 85};
    float ygRange[] = {85, 96};
    float greenRange[] = {96, 132};
    float gbRange[] = {132, 145};
    float blueRange[] = {145, 160};
    float bpRange[] = {160, 165};
    float purpleRange[] = {165, 180};

    const float* ranges[] = {redRange, roRange, orangeRange, oyRange, yellowRange, ygRange, greenRange, gbRange, blueRange, bpRange, purpleRange};

    vector<Mat> channels;

    scene = imread("Apple.jpg", 1);
    if (scene.data == NULL)
    {
        cout<<"FAIL"<<endl;
        cin.get();
    }

    cvtColor(scene, sceneHSV, CV_BGR2HSV);
    dilate(sceneHSV, sceneHSV, Mat(), Point(-1, -1), 1, BORDER_CONSTANT, 1);
    pyrMeanShiftFiltering(sceneHSV, dest, 2, 50, 3);
    split(sceneHSV, channels); 

    calcHist(&scene, 1, histChannel, Mat(), histo, dims, histSize, ranges, false, false); 

    cout<<histo<<endl;

    waitKey(0);

    return 0;
}

Was jetzt? Wie würden die Argumente für calcHist in diesem Fall aussehen und wie sieht das Ausgabe-Histogramm aus? Einfach ein 1x9 Array voller Ints?

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage