gpt4 book ai didi

java - 在 OpenCV 中将 `BufferedImage` 转换为 `Mat`

转载 作者:IT老高 更新时间:2023-10-28 21:14:10 24 4
gpt4 key购买 nike

如何在 OpenCV 中将 BufferedImage 转换为 Mat

我正在使用 OpenCV(不是 JavaCV)的 JAVA 包装器。由于我是 OpenCV 的新手,我在理解 Mat 的工作原理时遇到了一些问题。

我想做这样的事情。 (根据 Ted W. 的回复):

BufferedImage image = ImageIO.read(b.getClass().getResource("Lena.png"));

int rows = image.getWidth();
int cols = image.getHeight();
int type = CvType.CV_16UC1;
Mat newMat = new Mat(rows, cols, type);

for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
newMat.put(r, c, image.getRGB(r, c));
}
}

Highgui.imwrite("Lena_copy.png", newMat);

这不起作用。 Lena_copy.png 只是一张尺寸正确的黑色图片。

最佳答案

我也试图做同样的事情,因为需要将图像处理与两个库结合起来。我尝试做的是将 byte[] 放入 Mat 而不是 RGB 值。它奏效了!所以我所做的是:

1.将BufferedImage转换为字节数组:

byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();

2。然后,如果您将 type 设置为 CV_8UC3

,则可以简单地将其放入 Mat
image_final.put(0, 0, pixels);

编辑:你也可以尝试在 this answer 上做相反的事情。

关于java - 在 OpenCV 中将 `BufferedImage` 转换为 `Mat`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com