gpt4 book ai didi

python - Opencv - Python RGB 到 GRAY 转换器

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:19 28 4
gpt4 key购买 nike

我想在没有任何内置 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)

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

最佳答案

当您使用 np.zeros 创建您的 matrix 数组时,默认情况下,它被分配 dtype=float。因此,即使您将值四舍五入并将其转换为 int,当将它们写入 matrix 时,它们也会存储为 float。如果你阅读 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,从而弄乱了最终结果。

你可以做两件事:

  1. 有一个浮点矩阵,跳过所有舍入,并将您的值除以 255。
  2. 使用 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

关于python - Opencv - Python RGB 到 GRAY 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422704/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com