OpenCV - Zamieszanie przy użyciu calcHist

Przeczytałem dokumentację calcHist () wiele razy, ale myślę, że mój brak doświadczenia z OpenCV i rdzawymi umiejętnościami programistycznymi całkowicie uniemożliwia mi zrozumienie.

Szukam liczenia pikseli w jednym kanale obrazu HSV (Odcień lub kanał [0]) do celów segmentacji przy użyciu 10 pojemników, które dokładnie przybliżają kolor w zależności od czegoś (użyjmy tego jako przykładu, ukradłem zakresy the web - fwiw, wydaje się błędne pomijanie fioletowo-czerwonego):

Czerwony: 0-19 i 330-360 Czerwono-żółty (RY): 20-49 Żółty: 50-69 YG: 70-84 Zielony: 85-170 GB: 171-191 Niebieski: 192-264 BP: 265-289 Fioletowy : 290-329

I tak dalej...

Jak mam to zrobić z calcHist?

Jestem tak daleko jak:

#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;
}

Co teraz? Jak wyglądałyby argumenty calcHist w tym przypadku i jak wygląda histogram wyjściowy? Po prostu tablica 1x9 pełna intów?

Dziękuję bardzo.

questionAnswers(1)

yourAnswerToTheQuestion