imagen example and abrir matlab opencv jpeg opencv3.0 imread

example - OpenCV vs Matlab: diferentes valores en píxeles con imread



opencv imshow c++ (2)

Este código proporciona los valores correctos para su imagen de ejemplo test2.jpg :

#include <opencv2/highgui/highgui.hpp> #include <iostream> int main() { auto img = cv::imread("test2.jpg"); auto pixel = img.at<cv::Vec3b>(85, 85); std::cout << (int)pixel[0] << "/t" << (int)pixel[1] << "/t" << (int)pixel[2] << std::endl; }

Salida:

118 105 91

La versión de OpenCV aquí es 2.4.10. Obtengo el mismo resultado cuando uso tu código. Supongo que hay un error en algún lugar que está más allá de tu influencia.

He encontrado un problema con la función imread() en Matlab (2014) y OpenCV (3.0) en Windows 7 con archivos jpg.

No tengo los mismos valores leyendo el mismo archivo jpg y el mismo píxel.

Aquí están mis 2 códigos: (código OpenCV seguido del código Matlab) y los valores que tengo (modo depuración para ver en OpenCV, teclado en Matlab)

#include <opencv2/opencv.hpp> #include <cstdio> using namespace cv; using namespace std; int main() { Mat img = imread("test.jpg"); uchar pb = img.at<Vec3b>(0, 0).val[0]; uchar pg = img.at<Vec3b>(0, 0).val[1]; uchar pr = img.at<Vec3b>(0, 0).val[2]; int d = img.depth(); int t = img.type(); }

Valores :

pixel [0,0] = (147,174,204); // = index(1,1) in the image. d = 0; t = 16;

Código Matlab:

img = imread(''test.jpg''); img(1,1,:) whos img

Valores :

ans(:,:,1) = 148 ans(:,:,2) = 174 ans(:,:,3) = 201 Name Size Bytes Class Attributes img 1920x2560x3 14745600 uint8

¿Tienes alguna idea de por qué los valores son diferentes?

He visto en otra publicación un problema como este, pero la persona no tenía la misma profundidad leyendo un tiff. ¡Aquí, como pueden ver, tengo la misma profundidad!

Gracias de antemano y perdón por cualquier error en inglés.

PD: también he probado con otros píxeles, mismos resultados: resultados cerrados pero no exactamente iguales.


Para las personas que leerían este tema, esta es la explicación final:

Viene de la versión de libjpeg. La versión 6b (OpenCV usó esta antes 2.4.11) funciona de la misma manera que Matlab 2014b. Desde la versión 8 de libjpeg, tuve los otros resultados que mencioné anteriormente.

Para resolver mi problema (utilicé alguna diferencia de imagen y fondo para crear una máscara y mi problema era que tenía algo de nieve en la imagen con OpenCV (sin libjeg versión 6b), compilé OpenCV 3.0 con libjpeg 6b. (También tuve importar 2 bibliotecas de tiempo de ejecución y ponerlo en mi proyecto, encontrado libremente en la web).

No informé de errores en OpenCV. Para ser sincero, no me las arreglé, no entendí cómo hacer en su sitio web, incluso lo intenté ...