Hoe maak je een HSV-Histogram met JavaCV

Ik ben nieuw in JavaCV en wil een Histogram maken van een afbeelding.

Ik heb geprobeerd om een ​​C ++ -code in Java te vertalen, maar JavaCV heeft geen methoden zoals cvCVtPixToPlane .

Kan iemand me helpen een histogram te maken?

3

1 antwoord

een translatet OpenCV-code van de OpenCV-Wiki moet worden uitgevoerd.

Ik geef je mijn code-snipet om een ​​1D-diagram van het h-kanaal te maken:

private CvHistogram getHueHistogram(IplImage image){
    if(image==null || image.nChannels()<3) new Exception("Error!");
    IplImage hsvImage= cvCreateImage(image.cvSize(), image.depth(), 3);
    cvCvtColor(image, hsvImage, CV_BGR2HSV);
   //Split the 3 channels into 3 images
    IplImageArray hsvChannels = splitChannels(hsvImage);
    //bins and value-range
    numberOfBins=255;
    float minRange= 0f;
    float maxRange= 180f;
   //Allocate histogram object
   int dims = 1;
   int[]sizes = new int[]{numberOfBins};
   int histType = CV_HIST_ARRAY;
   float[] minMax = new  float[]{minRange, maxRange};
   float[][] ranges = new float[][]{minMax};
    int uniform = 1;
    CvHistogram hist = cvCreateHist(dims, sizes, histType, ranges, uniform);
   //Compute histogram
    int accumulate = 1;
    IplImage mask = null;
    cvCalcHist(hsvChannels.position(0),hist, accumulate, null);
    return hist;
}

En mijn splitChannels-methode, die ik in deze snipet gebruikte:

private IplImageArray splitChannels(IplImage hsvImage) {
    CvSize size = hsvImage.cvSize();
    int depth=hsvImage.depth();
    IplImage channel0 = cvCreateImage(size, depth, 1);
    IplImage channel1 = cvCreateImage(size, depth, 1);
    IplImage channel2 = cvCreateImage(size, depth, 1);
    cvSplit(hsvImage, channel0, channel1, channel2, null);
    return new IplImageArray(channel0, channel1, channel2);
}

Als u een afbeelding uit het histogram wilt tekenen, kunt u de laden herhalen. Met cvQueryHistValue_1D() kunt u de som van pixels van bin_i ophalen

3
toegevoegd