В Java:
Я читаю изображение с помощью JAI:
BufferedImage image = javax.imageio.ImageIO.read(new File("path to JPG image"));
Затем я смотрю на значение rgb пикселя (0,2):
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";
Значения разные: значение r в Java равно 156, а в C ++ — 155. Почему?
Я думаю, что это связано с форматом изображения, а не с Java или OpenCV. JPEG — это сжатие с потерями, поэтому при декодировании данных вы можете получить разные выходные данные для одного и того же изображения. Это будет зависеть от того, какой декодер вы используете для чтения информации об изображении. Проблема, которую вы экспериментируете, похожа на проблему, описанную в приведенном ниже вопросе.
Других решений пока нет …