我使用 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);
这在某些情况下有效。问题是:
对于具有透明通道(即 32BPP)的 png 图像,它会转换通道,因此
R=00 G=33 B=66 A=FF
变为R=33 G=66 B=FF
在我的目标环境中,我无法使用
ImageIO
- 对象转换太多
InputStream -> BufferedImage -> Frame -> Mat
。我觉得应该有一种简单有效的方法来做到这一点。
从资源创建 Mat 的最佳方法是什么?