【问题标题】:Open CV - Python RGB to GRAY convertorOpencv - Python RGB 到 GREY 的转换
【发布时间】:2013-01-03 13:36:38
【问题描述】:

我想在没有任何内置 Open-CV 功能的情况下将此 RGB 转换为灰度转换器。这就是我的代码的样子

import cv2 , numpy
def GrayConvertor(img):


    rows , cols , layers = img.shape

    matrix = numpy.zeros((rows , cols))

    for i in range(rows):
        for j in range(cols):
            val = 0.114 * (img[i][j][0]) + 0.587 * (img[i][j][1]) + 0.299 * (img[i][j][2])
            fraction = val - int(val)
            if fraction >= 0.5:
                matrix[i][j] = (int(val) + 1) 

            else: 
                matrix[i][j] = int(val) 
    cv2.imshow("gray" , matrix)
    cv2.waitKey(0)

但是它显示一个空白图像,有什么想法吗?

【问题讨论】:

    标签: python opencv numpy grayscale computer-vision


    【解决方案1】:

    当您使用np.zeros 创建您的matrix 数组时,默认情况下会分配给dtype=float。因此,即使您将值四舍五入并将其转换为int,当将它们写入matrix时,它们也会存储为floats。如果您阅读the docs for cv.imshow,您会发现以下内容:

    • 如果图像是 32 位浮点,则像素值为 乘以255。即取值范围[0,1]映射到 [0,255]。

    因此,您图像中的所有内容都乘以 255,从而弄乱了您的最终结果。

    你可以做两件事:

    1. 有一个浮点数 matrix,跳过所有舍入,然后将您的值除以 255。
    2. 使用dtype='uint8' 显式创建您的matrix,并保持一切不变。

    还有一个事实是您对 numpy 的功能的使用非常差。我上面给你的两个选项,你可以在没有循环或矩阵分配的情况下编码,如

    rgb2k = np.array([0.114, 0.587, 0.299])
    matrix_int = np.round(np.sum(img * rgb2k, axis=-1)).astype('uint8')
    matrix_float = np.sum(img * rgb2k, axis=-1) / 255
    

    【讨论】:

    • 非常感谢。这个问题困扰了我很久,不知道在哪里可以找到解决方案。
    【解决方案2】:

    尝试:

    import cv2 , numpy
    def GrayConvertor(img):
    
    
        rows , cols , layers = img.shape
    
        matrix = numpy.zeros((rows , cols))
    
        for i in range(rows):
            for j in range(cols):
                val = 0.114 * (img[i][j][0]) + 0.587 * (img[i][j][1]) + 0.299 * (img[i][j][2])
                    matrix[i][j] = round(val) 
        cv2.imshow("gray" , matrix)
        cv2.waitKey(0)
    

    【讨论】:

    • 我不使用 Python。在将值放入 matrix[i][j] 之前尝试转换为 uchar。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2018-11-30
    相关资源
    最近更新 更多