Pregunta

I am using OpenCV 2.4.4 on a Cent OS machine. My code currently loads an image with the warning: component data type mismatch

here is the code:

#include <cv.h>
#include <highgui.h>
#include "imglib.h"

int main( int argc, char** argv )
{
    Mat image = imread( argv[1], CV_LOAD_IMAGE_ANYDEPTH);
    imwrite("debugwriteout.jp2", image);
}

I pass the name of a .jp2 greyscale file in the args. The image has a 14-bit pixel depth, but when I print out the pixel values I get values over 20000, and my image is now a completely black square. Any advice would be appreciated.

Additional information: When I change the imread flag to CV_LOAD_IMAGE_GRAYSCALE it successfully convert the image to an 8-bit pixel depth and prints useful output so I can tell that the jasper module is working at least somewhat correctly.

Any advice would be appreciated,

Thanks

¿Fue útil?

Solución

SZman,

I solved my problem. The solution is the position of the high bit. On 16 bits, for a 14 bits depth, you have xxxxxxxxxxxxxx00 instead of 00xxxxxxxxxxxxxx. If you want the correct value, you must decal of 2 bits on the right.

Otros consejos

Please read the image using those flags

Mat image = imread( argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top