NumPy convert 8-bit to 16/32-bit image
17,096
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
Author by
Admin
Updated on August 06, 2022Comments
-
Admin over 1 year
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 as said in the documentation:
If you use cvtColor with 8-bit images, the conversion will have some information lost. For many applications, this will not be noticeable but it is recommended to use 32-bit images in applications that need the full range of colors or that convert an image before an operation and then convert back.
So I would like to convert my image in 16 or 32 bits, but I didn't found how to do it with NumPy. Some ideas?
img = cv2.imread(imgNameIn) # Here I want to convert img in 32 bits cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB, img) # Some image processing ... cv2.cvtColor(img, cv2.COLOR_YCR_CB2BGR, img) cv2.imwrite(imgNameOut, img, [cv2.cv.CV_IMWRITE_PNG_COMPRESSION, 0])
-
Dan Mašek over 6 years"result f a multiplication ... returns in general a float` -- Could you, please, provide some demonstrations of this happening?
-
Eskapp over 6 years@DanMašek I meant "in general" in the mathematical sense of the term - At least once. I re-wrote what I had in mind in a clearer way. Thank you for pointing out that my answer was confusing.
-
skull3r7 over 3 yearsyou can also use
cv2.normalize(img, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX)
to get the right 16bit values