scala - 如何使用 JavaCV 创建 HSV 直方图

标签 scala opencv histogram javacv

我是 JavaCV 新手,想根据图像创建直方图。

我试图将一些 C++ 代码翻译成 Java,但 JavaCV 没有像 cvCVtPixToPlane 这样的方法。

有人可以帮我创建直方图吗?

最佳答案

必须运行来自 OpenCV-Wiki 的翻译 OpenCV 代码。

我给你我的代码片段,从 h channel 创建一维图:

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-Method,我在这个片段中使用:

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

如果您想从直方图中绘制图片,您可以迭代 bin。使用 cvQueryHistValue_1D() 你可以从 bin_i 中得到像素的总和

关于scala - 如何使用 JavaCV 创建 HSV 直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11173836/

相关文章:

scala - Scala 中的 ADT 子类型化

scala - Scala 中的 double 组

opencv - 如何在OPenCV中计算32位浮点图像的图像直方图

scala - Scala 可以通过引用调用吗?

scala - Spock mock Akka 的 ActorRef

Android OpenCV : how to properly call Looper. 准备()

java - 如何在Android中使用Opencv在图像上有效应用Canny边缘检测器?

c++ - 使用 OpenCV/C++ 设置树莓相机模式

plot - 水平(横向)直方图 - gnuplot

gnuplot - gnuplot直方图: How to put values on top of bars