如何将numpy数组更改为灰度opencv图像

时间:2014-06-09 16:20:57

标签: python arrays opencv numpy

如何在python中将numpy数组更改为灰度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 个答案:

答案 0 :(得分:11)

正如断言所述,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)

答案 1 :(得分:4)

这个为我工作:

uint_img = np.array(float_arr*255).astype('uint8')

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

答案 2 :(得分:0)

我需要将闭合图像(形态学闭合)转换为二进制,然后检查@Aurelius解决方案,这一点对我来说比提到的解决方案更好。

Python cv2.CV_8UC1() Examples

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