How to display 16-bit 4096 intensity image in Python openCV?
You'll want to use cv2.normalize()
to scale the image before displaying.
You can set the min/max of the image and it will scale the image appropriately (by moving the min of the image to alpha
and max of the image to beta
). Supposing your img
is already a uint16
:
img_scaled = cv2.normalize(img, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX)
And then you can view as normal.
By default, cv2.normalize()
will result in an image the same type as your input image, so if you want an unsigned 16-bit result, your input should be uint16
.
Again, note that this linearly stretches your image range---if your image never actually hit 0 and say the lowest value was 100, after you normalize, that lowest value will be whatever you set alpha
to. If you don't want that, as one of the comments suggests, you can simply multiply your image by 16, since it's currently only going up to 4095. With * 16, it will go up to 65535.
![Jay Wong](https://lh4.googleusercontent.com/-26CK5H5SP94/AAAAAAAAAAI/AAAAAAAAATc/Dx113UH4CcI/photo.jpg?sz=256)
Jay Wong
A college student with interests in sociology, math, and computer science.
Updated on June 12, 2022Comments
-
Jay Wong about 2 years
I have images encoded in grayscale 16-bit tiff format. They use a variant of 16-bit color depth where the max intensity is 4,096.
I believe the default max intensity in openCV is 65,536, so my image shows up as black using the following code.
import cv2 image = cv2.imread("test.tif", -1) cv2.imshow('tiff', image) cv2.waitKey(0) cv2.destroyAllWindows() print(image)
I can use
vmin
andvmax
inmatplotlib
to configure the color mapping:import cv2 import matplotlib.pyplot as plt image = cv2.imread("test.tif", -1) plt.imshow(image, cmap="gray", vmin=0, vmax=4096) plt.show()
It shows the content of the image:
The reason why I want to stick with openCV is
matplotlib
doesn't support displaying 16-bit RGB images.The documentation of
cv2.imshow
is not really helpful. Are there ways to display 16-bit 4096 intensity images in Python openCV?The testing image
test.tif
can be found here.