编程语言
首页 > 编程语言> > 打开CV-Python RGB到GREY转换器

打开CV-Python RGB到GREY转换器

作者:互联网

我想将此RGB转换为灰度转换器,而没有任何内置的Open-CV功能.这就是我的代码的样子

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)

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

解决方法:

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

  • If the image is 32-bit floating-point, the pixel values are
    multiplied by 255. That is, the value range [0,1] is mapped to
    [0,255].

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

您可以做两件事:

>具有浮点矩阵,跳过所有舍入,然后将值除以255.
>使用dtype =’uint8’显式创建矩阵,并使所有内容保持不变.

还有一个事实是,您对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

标签:grayscale,opencv,computer-vision,python,numpy
来源: https://codeday.me/bug/20191031/1975243.html