【发布时间】:2018-02-19 21:48:14
【问题描述】:
我有一个 16 位图像,我想将其转换为灰色。
对于 8 位图像,它适用于:
img = cv2.imread('test.png')
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY)
stackoverflow 中的人们写道,OpenCV 不能很好地处理超过 8 位的图像?
有人知道将我的 16 位 .png 图像转换为灰色的可能性吗?
【问题讨论】:
-
你必须想一想它用这个 16 位表示的是什么……它是深度图像吗?是热像吗?它只是一个花哨的灰度吗?如果你只想要一个灰色图像,你总是可以使用
normalize(img, dst, 0,255, NORM_MINMAX, CV_8U)....此外,根据功能,opencv 可能接受 16 位......所以这取决于图像是什么以及你想用它做什么跨度> -
我想测量灰度深度图像中的像素强度(单色激光测量)。并且转换后必须是16bit,因为它必须非常准确。
-
你试过这个
COLOR_BGR5652GRAY。我想你会得到更多的想法here。 -
我试过 'COLOR_BGR5652GRAY' 并得到 cv2.error: /home/...: error: (-215) scn == 2 && depth == CV_8U in function cvtColor
-
你是说你已经有了灰度图,不需要转换,标准化即可。虽然,如果你想要 8 位的,你会丢失信息。试试
img.astype(np.uint8),如果img类型是np.uint16,它应该可以工作。