0
点赞
收藏
分享

微信扫一扫

OpenCV4.3 Java 编程入门:HighGUI 图像显示

Sophia的玲珑阁 2022-04-17 阅读 66
opencvjava

文章目录

HighGUI模块的设计目的是对 opencv 图像处理功能进行快速尝试并将结果可视化:

  • 创建和操作可以显示图像并“记住”其内容的窗口(无需处理来自操作系统的绘制事件);
  • 在窗口中添加轨迹栏,处理简单的鼠标事件以及键盘命令。

1 HighGUI 类

HighGUI 类在 org.opencv.highgui 包内:
在这里插入图片描述
类中的方法

方法说明
static javax.swing.JFrame createJFrame​(java.lang.String title, int flag)创建 JFrame 实例,也就是 Java 版的窗口对象
static void destroyAllWindows()注销所有打开的窗口
static void destroyWindow​(java.lang.String winname)注销指定名称的窗口
static void imshow​(java.lang.String winname, Mat img)在窗口中显示图像
static void moveWindow​(java.lang.String winname, int x, int y)移动窗口位置
static void namedWindow​(java.lang.String winname)创建命名窗口
static void namedWindow​(java.lang.String winname, int flag)
static void resizeWindow​(java.lang.String winname, int width, int height)更改窗口尺寸
static java.awt.Image toBufferedImage​(Mat m)
static void waitKey()等待关闭
static int waitKey​(int delay)

其中最常用的方法是 imshow 方法,用来显示 Mat 对象所表示的图像。

如果窗口是使用 window_AUTOSIZE 标志创建的,则图像将以其原始大小显示,但仍受屏幕分辨率的限制。否则,将缩放图像以适应窗口。该功能可以根据图像的深度缩放图像:

  • 如果图像是8位无符号的,则按原样显示;
  • 如果图像是16位无符号的,则像素除以256。也就是说,值范围[0,255*256]被映射到[0,255];
  • 如果图像是32位或64位浮点,则像素值乘以255。也就是说,值范围[0,1]被映射到[0,255];
  • 由于所需变换的模糊性,不再处理32位整数图像。使用特定于图像上下文的自定义预处理将其转换为8位无符号矩阵。

如果需要显示大于屏幕分辨率的图像,则需要在 imshow 之前调用 namedWindow("",WINDOW_NORMAL)。

imshow 方法之后应该调用 waitKey(),然后再执行 GUI 管理任务。否则,它将不会显示图像,窗口可能会锁定。例如,waitKey(0) 将无限显示窗口,直到按任意键为止(它适用于图像显示)。waitKey(25)将显示一帧,并等待大约25毫秒,等待按键(适用于逐帧显示视频)。要删除窗口,请使用 destroyWindow。

waitKey() 方法,会等待直到有键按下!

2 显示图像

    public void showTest(){
        Mat mat = new Mat(480, 640, CV_8U);
        for (int i = 0; i < mat.rows(); i++) {
            for (int j = 0; j < mat.cols(); j++) {
                boolean a = i%100 > 50;
                boolean b = j%100 > 50;
                if (a && b || (!a && !b)) {
                    mat.put(i, j, 0);
                } else {
                    mat.put(i, j, 255);
                }
            }
        }

        HighGui.imshow("Test", mat);
        HighGui.waitKey();
    }

执行程序,会打开窗口,并显示 mat 对象中的图像:
在这里插入图片描述

举报

相关推荐

0 条评论