OpenCV – Reading a 16 bit grayscale image

Question:

I’m trying to read a 16 bit grayscale image using OpenCV 2.4 in Python, but it seems to be loading it as 8 bit.

I’m doing:

im = cv2.imread(path,0)
print im

[[25 25 28 ...,  0  0  0]
[ 0  0  0 ...,  0  0  0]
[ 0  0  0 ...,  0  0  0]
..., 

How do I get it as 16 bit?

Asked By: Kkov

||

Answers:

Figured it out. In case anyone else runs into this problem:

im = cv2.imread(path,-1)

Setting the flag to 0, to load as grayscale, seems to default to 8 bit. Setting the flag to -1 loads the image as is.

Answered By: Kkov

I had the same issue (16-bit .tif loading as 8-bit using cv2.imread). However, using the -1 flag didn’t help. Instead, I was able to load 16-bit images using the tifffile package.

Answered By: Eric Olmon

To improve readability use the flag cv2.IMREAD_ANYDEPTH

image = cv2.imread( path, cv2.IMREAD_ANYDEPTH )
Answered By: Thomio

This question suggests that image = cv2.imread('16bit.png', cv2.IMREAD_UNCHANGED) will also solve your problem.

Answered By: Breadman10
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.