Преобразование BufferedImage в Mat (OpenCV) в Java [дубликат]
На этот вопрос уже есть ответ здесь:
Преобразование BufferedImage в Mat в opencv 7 ответовЯ пробовал этоссылка на сайт и иметь код ниже. Моя программа импортирует изображения в формате BufferedImage, а затем отображает их пользователям. Я используюmatchingTemplate функция в OpenCV, которая требует от меня, чтобы преобразовать его в формат Mat.
Код работает, если я импортирую изображение -> преобразовать его в Mat, а затем сохранить изображение с помощью imwrite. Программа также позволяет пользователю обрезать изображение, а затем использоватьСоответствие шаблона сравнить его с другим изображением. Проблема возникла, когда я попытался преобразовать обрезанное изображение в Mat. Мне нужно преобразовать его из Int в Byte, используя этот код:
im = new BufferedImage(im.getWidth(), im.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
Это, однако, приводит к черному изображению. Но если я от этого избавлюсь, он работает только с импортированными изображениями, а не обрезается. Что здесь происходит? Я уверен, что это как-то связано с процессом покрытия, так как я протестировал функцию сопоставления с шаблоном, используя read in images.
// Convert image to Mat
public Mat matify(BufferedImage im) {
// Convert INT to BYTE
//im = new BufferedImage(im.getWidth(), im.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
// Convert bufferedimage to byte array
byte[] pixels = ((DataBufferByte) im.getRaster().getDataBuffer())
.getData();
// Create a Matrix the same size of image
Mat image = new Mat(im.getHeight(), im.getWidth(), CvType.CV_8UC3);
// Fill Matrix with image values
image.put(0, 0, pixels);
return image;
}