[英]How to use imageio imread to get a multi channel array (RGB) from a single channel image (grayscale)?
[英]OpenCV imread of grayscale image returns 3-channel (color?) array instead of single-channel
我有以下 python function 下面将图像和噪声系数作为输入参数,以便转换为噪声的总像素的百分比与系数成正比(表示为噪声矩阵)。 然后将该噪声矩阵与原始图像相乘以获得噪声图像。
def dot_salt_pepper(img, noise_coeff):
height = img.shape[0]
width = img.shape[1]
noise_matrix = np.ones([height, width])
num_noise_pixels = int(height * width * noise_coeff)
for i in range(num_noise_pixels):
noise_matrix[np.random.randint(height)][np.random.randint(width)] = 0
new_img = np.multiply(img, noise_matrix)
new_img = np.uint8(img)
return new_img
我知道为了给现有图像添加点噪声,必须首先将图像转换为灰度。 然而,我正在使用的图像是灰度格式的,因此当我使用cv2.imread('img.jpg')
在 OpenCV 中读取它时,调用print(img.shape)
输出元组(3000, 4000, 3)
这表明BGR 通道仍然存在于图像中(因此我不能将 2D 噪声矩阵乘以 3D 图像矩阵)。 我如何解决这个问题?
图像是 RGB 数据类型,即使它没有颜色
转换为灰度
这可以在读取图像cv2.imread(IMAGE_FILE, cv2.IMREAD_GRAYSCALE)
您提供的 JPEG 文件是 grayscale ,而不是 RGB。
imread
始终转换为 BGR,除非您传递一些标志。
传递IMREAD_UNCHANGED
标志以准确获取文件中的内容。 这将适用于您的文件,因为它是灰度的。
传递IMREAD_GRAYSCALE
强制转换为灰色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.