JavaCv:如何将 IplImage 转换为 BufferedImage
JavaCv: how to convert IplImage toBufferedImage
我必须将 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 returns总是空值。我不知道我哪里出错了。
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);
}
用"org.bytedeco.javacv.Java2DFrameUtils",你就知道我说的是什么了
我必须将 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 returns总是空值。我不知道我哪里出错了。
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);
}
用"org.bytedeco.javacv.Java2DFrameUtils",你就知道我说的是什么了