numpy 如何在opencv中将图像转换为灰度[已关闭]

k5hmc34c  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(131)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
昨天关门了。
Improve this question
我正在尝试将图像转换为灰度。
第1次进路

import cv2
import numpy as np

image=cv2.imread('dogs.jpg')
print(image.shape)
grayscale_image=np.zeros(image.shape[:2],np.uint8)



for i in range(image.shape[0]):
    for j in range(image.shape[1]):
        grayscale_image[i][j]=(image[i][j][0]+image[i][j][1]+image[i][j][2])//3



cv2.imshow("Grayscale Image - 1 ",grayscale_image)

cv2.waitKey(0)

第二种方法

import cv2
import numpy as np

image=cv2.imread('dogs.jpg')
print(image.shape)
grayscale_image=np.zeros(image.shape[:2],np.uint8)

grayscale_image=np.mean(image,axis=2).astype(np.uint8)

cv2.imshow("Grayscale Image - 1 ",grayscale_image)

cv2.waitKey(0)

据我所知,这两种方法都是做同样的事情。但是两种方法的输出不同,为什么第二种方法的输出更好??

mrphzbgm

mrphzbgm1#

您可能会在第一次使用时遇到溢出:

>>> a = np.arange(12).reshape(4,3).astype(np.uint8) + 100
>>> a
array([[100, 101, 102],
       [103, 104, 105],
       [106, 107, 108],
       [109, 110, 111]], dtype=uint8)
>>> a[0][0]+a[0][1]+a[0][2]
<stdin>:1: RuntimeWarning: overflow encountered in scalar add
47
>>> (a[0][0]+a[0][1]+a[0][2])//3
15

相关问题