opencv - JavaCv:如何将 IplImage 转换为 BufferedImage

标签 opencv javacv

我必须将 IplImage 转换为 BufferedImage...本应是一项简单的任务对我来说变得非常复杂。我在 Mac OSX(与 OpenCV 3.0 链接)上使用 JavaCv 1.0。

在旧的 JavaCV API 中有 IplImage 方法#getBufferedImage,但我在新的 1.0 API 中找不到它了。所以我尝试将 IplImage 转换为字节数组,将字节数组转换为 BufferedImage。我找到了执行此类转换的解决方案:

IplImage inputImg = cvLoadImage(imgName); //imgName is a JPEG absolute path
byte[] imageData = IplImageToByteArray( inputImg); //defined below
ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
BufferedImage inputImage = ImageIO.read(bais); //Always return null

可以通过以下方式之一定义 IplImageToByteArray:

public static byte[] IplImageToByteArray(IplImage src) {
    ByteBuffer byteBuffer = src.getByteBuffer();
    byte[] barray = new byte[byteBuffer.remaining()];
    byteBuffer.get(barray);
    return barray;
}

public static byte[] IplImageToByteArray2(IplImage src) {
    byte[] barray = new byte[src.imageSize()];
    src.getByteBuffer().get(barray);
    return barray;
}

两种情况下返回的字节数组相同,但 ImageIO.read 始终返回空值。我不知道自己出了什么问题。

最佳答案

public static BufferedImage IplImageToBufferedImage(IplImage src) {
    OpenCVFrameConverter.ToIplImage grabberConverter = new OpenCVFrameConverter.ToIplImage();
    Java2DFrameConverter paintConverter = new Java2DFrameConverter();
    Frame frame = grabberConverter.convert(src);
    return paintConverter.getBufferedImage(frame,1);
}

关于opencv - JavaCv:如何将 IplImage 转换为 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31873704/

相关文章:

c++ - openCV 2.4.8 iOS 7.0 框架链接器错误

python - 如何在Heroku上部署使用opencv的应用程序?

c++ - OpenCV:没有 GPU 支持(该库是在没有 CUDA 支持的情况下编译的)

opencv - 如何将 pyplot.contour(..) 转换为等效的 opencv?

opencv - OpenCV中的对应分析

python - Opencv(Python)内存使用问题

java - 检测正在看着网络摄像头的面孔

android - 可能使用 javacv/ffmpeg 将 h264 流式传输到 javafx

JavaCV FFmpegFrameGrabber 和 Java2DFrameConverter 创建奇怪的图像

android - IplImage 裁剪和旋转 - Android