【问题标题】:How to change numpy array into grayscale opencv image如何将numpy数组更改为灰度opencv图像
【发布时间】:2014-07-30 05:45:44
【问题描述】:

如何在 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 转换为正确的格式?

【问题讨论】:

    标签: python arrays opencv numpy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这个对我有用:

      uint_img = np.array(float_arr*255).astype('uint8')
      
      grayImage = cv2.cvtColor(uint_img, cv2.COLOR_GRAY2BGR)
      

      【讨论】:

        【解决方案3】:

        我需要将闭合图像(形态闭合)转换为二进制,并在检查@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)
        

        【讨论】:

          猜你喜欢
          • 2019-02-13
          • 1970-01-01
          • 1970-01-01
          • 2021-04-02
          • 1970-01-01
          • 2014-06-02
          • 1970-01-01
          • 1970-01-01
          • 2013-08-30
          相关资源
          最近更新 更多