2012-06-23 2 views
3

저는 JavaCV에서 새롭고 이미지에서 히스토그램을 만들고 싶습니다.JavaCV로 HSV-Histogram을 만드는 방법

일부 C++ 코드를 Java로 변환하려고했지만 JavaCV에는 cvCVtPixToPlane과 같은 메소드가 없습니다.

누군가가 히스토그램을 만들 수 있습니까?

답변

3

translatet OpenCV-Wiki의 OpenCV-Code를 실행해야합니다.

내가 당신에게 시간 - 채널에서 1D-다이어그램을 만들 수있는 내 코드 snipet 제공 :

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

당신 경우 :

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

그리고 내 splitChannels-방법, 나는이 snipet에 사용 막대 그래프를 반복 할 수있는 막대 그래프에서 그림을 그려야합니다. cvQueryHistValue_1D()를 사용하면 bin_i의 픽셀 합계를 얻을 수 있습니다