Мне нужно преобразовать IplImage в BufferedImage ... то, что должно быть простой задачей, становится очень сложным для меня. Я использую JavaCv 1.0 на Mac OSX (который связан с OpenCV 3.0).JavaCv: как преобразовать IplImage в BufferedImage
В старом API JavaCV был метод 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 возвращает всегда нулевое значение. Я понятия не имею, что я ошибаюсь.
Я нашел это самостоятельно. Вероятно, причина, по которой ImageIO.read всегда возвращает null, состоит в том, что байты IplImage имеют формат, который BufferedImage не может читать. Он отличается от распространенных PNG, JPG, BMP, ecc. –