Java JAI BufferedImage 与 C++ OpenCV Mat imread 对比?

Java JAI BufferedImage versus C++ OpenCV Mat imread?

在Java中:

我正在使用 JAI 读取图像:

 BufferedImage image = javax.imageio.ImageIO.read(new File("path to JPG image"));

然后,我看一下像素点(0,2)的rgb值:

System.out.println("pixel[0][2]="+(new Color(image.getRGB(2, 0))));

在 C++ OpenCV 中:

Mat image = imread("path to the same JPG image");
image.convertTo(image, CV_32S);
cout <<" r value of pixel[0][2] "<< image.at<Vec3i>(0, 2)[2] << "\n";

值不同:Java 中的 r 值是 156,而在 C++ 中是 155。为什么?

我认为这与图像格式有关,与 Java 或 OpenCV 无关。 JPEG 是有损压缩,因此在解码数据时,同一图像可能会得到不同的输出。这将取决于您用来读取图像信息的解码器。您正在试验的问题类似于以下问题中描述的问题。