Skip to content Skip to sidebar Skip to footer

NumPy Convert 8-bit To 16/32-bit Image

I am using OpenCV 2 to do some images manipulations in YCbCr color space. For the moment I can detect some noise due to the conversion RGB -> YCbCr and then YCbCr -> RGB, but

Solution 1:

Thanks to @moarningsun, problem resolved:

i = cv2.imread(imgNameIn, cv2.CV_LOAD_IMAGE_COLOR) # Need to be sure to have a 8-bit input
img = np.array(i, dtype=np.uint16) # This line only change the type, not values
img *= 256 # Now we get the good values in 16 bit format

Solution 2:

The accepted answer is not accurate. A 16-bit image has 65536 intensity levels (2^16) hence, values ranging from 0 to 65535.

If one wants to obtain a 16-bit image from an image represented as an array of float ranging from 0 to 1, one has to multiply every coefficient of this array by 65535.

Also, it is good practice to cast the type of your end result as the very last step of the operations you perform. This is mainly for two reasons: - If you perform divisions or multiplications by float, the result will return a float and you will need to change the type again. - In general (in the mathematical sense of the term), a transformation from float to integer can introduce errors. Casting the type at the very end of the operations prevents error propagation.


Post a Comment for "NumPy Convert 8-bit To 16/32-bit Image"