You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java OpenCV 3.4.0中实现imshow、imwrite及截图?含版本迁移问题

OpenCV 2.X到3.X Java版本的API迁移避坑指南

很多同学从OpenCV 2.X切换到3.X的Java版本时,总会碰到API找不到或者用法搞错的情况,我来给大家梳理几个关键的迁移要点:

一、别搞错图像显示的API!

在OpenCV 2.X里,我们用HighGui.imshow(windowName, Mat image)来显示图像,但到了3.X,有人误以为要用Imgcodecs.imwrite(windowName, Mat image)替代——这完全是个误区!

Imgcodecs.imwrite()的作用是把图像保存到本地文件,根本不是用来显示图像的,用它自然没法正常弹出图像窗口。如果要在3.X里显示图像,正确的做法还是用HighGui.imshow(),只是要注意包路径是org.opencv.highgui.HighGui。

二、图像读取API的迁移

2.X里的图像读取方法都在Highgui类下,到了3.X统一迁移到Imgcodecs类中,对应关系如下:

  • 2.X:Highgui.imread(fileName, Highgui.CV_LOAD_IMAGE_GRAYSCALE) → 3.X:Imgcodecs.imread(fileName, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE)
  • 2.X:Highgui.imread(fileName) → 3.X:Imgcodecs.imread(fileName)

三、绘图函数的迁移

2.X里放在Core类下的绘图相关函数,在3.X里全部移到Imgproc类中了:

  • 2.X:Core.circle(...) → 3.X:Imgproc.circle(...)
  • 2.X:Core.line(...) → 3.X:Imgproc.line(...)

修正后的示例代码

你提供的示例代码里用Imgcodecs.imwrite是保存图像,如果要改成显示图像,代码应该这样写:

package myfirstPackage;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.core.Core;
import org.opencv.core.Mat;

public class ShowImage {
    public static void main(String[] args) {
        // 加载本地库
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat src = Imgcodecs.imread("lena.jpg", Imgcodecs.IMREAD_COLOR);
        // 显示图像
        HighGui.imshow("显示Lena图像", src);
        // 等待按键输入,否则窗口会一闪而过
        HighGui.waitKey(0);
        // 销毁所有窗口
        HighGui.destroyAllWindows();
    }
}

内容的提问来源于stack exchange,提问作者CL plane guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:38:31