OpenCV - 读取16位灰度图像

38
我正在尝试使用Python中的OpenCV 2.4读取一张16位灰度图像,但似乎它将其加载为8位。

我正在执行以下操作:

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]
..., 

我该如何将其转换成16位?

4个回答

50

弄明白了。如果有人遇到这个问题:

im = cv2.imread(path,-1)

将标志设置为0,以灰度模式加载图像时,默认情况下似乎为8位。将标志设置为-1可按原样加载图像。


这个标志对我来说完美地工作了。它将图像读取为uint16而不是uint8 - Amir Pourmand
如果有适当的标志,如cv2.IMREAD_ANYDEPTH,则不应使用固定数字(可读性、可维护性、防止标志值更改)。 - DomTomCat
为了清晰起见,请使用cv2.IMREAD_UNCHANGED来读取图像,其值为-1。 - undefined

39
为了提高可读性,请使用标志 cv2.IMREAD_ANYDEPTH
image = cv2.imread( path, cv2.IMREAD_ANYDEPTH )

8

我曾遇到同样的问题(使用cv2.imread加载16位.tif文件时,只能以8位方式打开)。然而,使用-1标志并没有帮助。相反,我成功地使用tifffile库来加载16位图像。


7
tifffile 包完美地发挥了作用。我尝试过的 cv2.imread 标志 (cv2.IMREAD_ANYDEPTH, cv2.IMREAD_ANYCOLOR, 这两个组合 (6),以及 -1) 都无效。 - colllin

3

这个问题建议使用image = cv2.imread('16bit.png', cv2.IMREAD_UNCHANGED)也可以解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接