Я использую JavaCV (не OpenCV). Моя цель — получить объект Mat
из изображения, которое хранится как ресурс. Затем я передам этот метод Mat
в метод opencv_imgproc.matchTemplate
. Мне удалось написать этот плохой код:
InputStream in = getClass().getResourceAsStream("Lenna32.png");
BufferedImage image = ImageIO.read(in);
Frame f = new Java2DFrameConverter().getFrame(image);
Mat mat = new OpenCVFrameConverter.ToMat().convert(f);
Это работает в некоторых случаях. Проблемы:
Для изображений png с каналом прозрачности (то есть 32BPP) он смещает каналы, так что
R=00 G=33 B=66 A=FF
превращается вR=33 G=66 B=FF
В моей целевой среде я не могу использовать
ImageIO
- Слишком много преобразований объектов
InputStream -> BufferedImage -> Frame -> Mat
. Я чувствую, что должен быть простой и эффективный способ сделать это.
Как лучше всего создать мат из ресурса?