juechen333 2022-10-05 00:35 采纳率: 100%
浏览 18
已结题

在IDEA中利用OpenCV已经实现了图像直方图,怎样画累计直方图?

在IDEA中利用OpenCV已经实现了图像直方图,怎样画累计直方图?
代码如下
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

import java.util.ArrayList;
import java.util.List;

public class calHistogram {
    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        test();
    }

    public static void test() {
        Mat m = Imgcodecs.imread("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\3.jpg");
        HighGui.imshow("原图", m);
        //灰度
        Mat m1 = new Mat();
        Imgproc.cvtColor(m, m1, Imgproc.COLOR_BGR2GRAY);
        HighGui.imshow("灰度", m1);
        List<Mat> images = new ArrayList<>();
        images.add(m1);

        //计算直方图
        Mat hist = new Mat();
        Imgproc.calcHist(images, new MatOfInt(0), new Mat(), hist, new MatOfInt(256), new MatOfFloat(0, 255));

        //数值归一化
        Core.normalize(hist, hist, 0, 255, Core.NORM_MINMAX);
        int h = hist.rows();
        Mat m2 = new Mat(new Size(400, 400), m.type(), new Scalar(200, 200, 200));

        float[] histData = new float[256];
        hist.get(0, 0, histData);

        int x = 20;
        int y = 300;
        Imgproc.line(m2, new Point(x, 0), new Point(x, y), new Scalar(255, 0, 0));
        Imgproc.line(m2, new Point(x, y), new Point(400, y), new Scalar(255, 0, 0));

        for (int i = 0; i < h - 1; i++) {
            int y1 = (int) histData[i];
            Rect rect = new Rect();
            rect.x = x + i;
            rect.y = y - y1;
            rect.width = 1;
            rect.height = y1;
            Imgproc.rectangle(m2, rect.tl(), rect.br(), new Scalar(15, 15, 15));
        }
        HighGui.imshow("直方图", m2);
        HighGui.waitKey(0);
    }
}

求接下来累计直方图该怎么写,谢谢各位
在网上搜了很久,都没找到利用Java实现的例子
  • 写回答

2条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 10月20日
      • 已采纳回答 10月12日
      • 创建了问题 10月5日

      悬赏问题

      • ¥15 多个Rigify骨骼 导入一起 后 没有 控制器面板
      • ¥15 想问一下sprak ada语言的pre和post怎么设
      • ¥15 使用python将分子模拟输出.gro文件
      • ¥15 港诡实录的背包系统拆解
      • ¥15 完成赛博选角的需求,随机选取所扮演的文明
      • ¥15 宽带IP网络路由器的初始路由表和最终路由表
      • ¥15 c语言基础这几个该怎么搞
      • ¥15 ip 地址转换(字符串与指针)
      • ¥15 有没有同在北京有业余时间教编程的程序员?
      • ¥15 桌面路径修改到D盘,忘记创建文件夹