سؤال

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

هل كانت مفيدة؟

المحلول

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.

نصائح أخرى

Please read the image using those flags

Mat image = imread( argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top