Преобразование 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;

}

Ответы на вопрос(1)

Ваш ответ на вопрос