如何将numpy数组转换为灰度OpenCV图像

19

我该如何将numpy数组转换为python中的灰度opencv图像? 经过一些处理,我得到了一个具有以下属性的数组:最大值为0.99999999988,最小值为8.269656407e-08,并且类型为:<type 'numpy.ndarray'>。 我可以使用cv2.imshow()函数将其显示为图像,但是我无法将其传递到cv2.AdaptiveTreshold()函数,因为它的类型不正确:

error: (-215) src.type() == CV_8UC1 in function cv::adaptiveThreshold

我该如何将这个 np.array 转换为正确的格式?

3个回答

25

正如该断言所述,adaptiveThreshold()需要一个单通道的8位图像。

假设您的浮点数图像范围从0到1,这似乎是情况,您可以通过乘以255并转换为np.uint8来转换该图像:

float_img = np.random.random((4,4))
im = np.array(float_img * 255, dtype = np.uint8)
threshed = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, 0)

13
这个对我有用:
uint_img = np.array(float_arr*255).astype('uint8')

grayImage = cv2.cvtColor(uint_img, cv2.COLOR_GRAY2BGR)

1
我需要将闭合图像(形态学闭运算)转换为二进制,并在查看@Aurelius的解决方案后,发现这个比提到的解决方案更适合我。

Python cv2.CV_8UC1() 示例

mask_gray = cv2.normalize(src=mask_gray, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)

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