打开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