在Python中手动将RGB图像转换为灰度(不使用外部库)

在Python中手动将RGB图像转换为灰度(不使用外部库),python,image,matplotlib,image-processing,Python,Image,Matplotlib,Image Processing,我将每个像素的红色、绿色和蓝色值相加,并将总和除以3: gray_image=(图像[:,:,0]+图像[:,:,1]+图像[:,:,2])/3 这就是我得到的: 我的代码是: import matplotlib.image as pltim import matplotlib.pyplot as plt import numpy as np def rgb2gray(image): imageHeight = len(image) imageWidth = len(imag

我将每个像素的红色、绿色和蓝色值相加,并将总和除以3:

gray_image=(图像[:,:,0]+图像[:,:,1]+图像[:,:,2])/3

这就是我得到的:

我的代码是:

import matplotlib.image as pltim
import matplotlib.pyplot as plt
import numpy as np

def rgb2gray(image):
    imageHeight = len(image)
    imageWidth = len(image[0])
    grayImage = np.empty([imageHeight, imageWidth], dtype=np.uint8)

    for i in range(imageHeight):
        for j in range(imageWidth):
            grayImage[i][j] = int((image[i][j][0] + image[i][j][1] + image[i][j][2]) / 3)
    return grayImage


class RetargetedImage:
    imageDirectory = ""
    image = None
    grayImage = None

    def __init__(self, imageDirectory):
        self.imageDirectory = imageDirectory
        self.image = pltim.imread(self.imageDirectory)
        self.grayImage = rgb2gray(self.image)

    def showOriginalImage(self):
        plt.imshow(self.image)
        plt.show()

    def showGrayImage(self):
        plt.imshow(self.grayImage)
        plt.show()


example1 = RetargetedImage("treeMedium.jpg")
example1.showGrayImage()
这是原始图像:


我哪里做错了?

将rgb转换为灰度使用 灰色=0.2126*红色+0.7152*绿色+0.0722*蓝色

你能发布输出吗

范围内i的
(图像高度):
对于范围内的j(图像宽度):
灰度图像[i][j]=int(图像[i][j][0]*0.2126+图像[i][j][1]*0.7152+图像[i][j][2]*0.0722)
返回灰度图像

将rgb转换为灰度使用 灰色=0.2126*红色+0.7152*绿色+0.0722*蓝色

你能发布输出吗

范围内i的
(图像高度):
对于范围内的j(图像宽度):
灰度图像[i][j]=int(图像[i][j][0]*0.2126+图像[i][j][1]*0.7152+图像[i][j][2]*0.0722)
返回灰度图像

输入可以是实际RGB(A)数据,也可以是2D标量数据,这些数据将被渲染为伪彩色图像。注意:要实际显示灰度图像,请使用参数cmap='gray',vmin=0,vmax=255设置颜色映射

要以灰度显示图像,请执行以下操作:

def showGrayImage(self):
    plt.imshow(self.grayImage, cmap='gray', vmin=0, vmax=255)
    plt.show()
关于行:

grayImage[i][j] = int((image[i][j][0] + image[i][j][1] + image[i][j][2]) / 3)
如前所述,缺少R、G和B通道的三个加权系数

输入可以是实际RGB(A)数据,也可以是2D标量数据,这些数据将被渲染为伪彩色图像。注意:要实际显示灰度图像,请使用参数cmap='gray',vmin=0,vmax=255设置颜色映射

要以灰度显示图像,请执行以下操作:

def showGrayImage(self):
    plt.imshow(self.grayImage, cmap='gray', vmin=0, vmax=255)
    plt.show()
关于行:

grayImage[i][j] = int((image[i][j][0] + image[i][j][1] + image[i][j][2]) / 3)
如前所述,缺少R、G和B通道的三个加权系数


我们在哪里找到了0.2126、0.7152和0.0722?我申请了,现在我得到了这个图像:我们在哪里找到了0.2126,0.7152和0.0722?我申请了,现在我得到了这张图片:
plt.imshow(…,cmap='gray')
尝试避免
对于
循环(它们非常慢而且容易出错),使用
np.dot()
plt.imshow(…,cmap='gray')
尝试避免
对于
循环(它们非常慢且容易出错),使用
np.dot()
。。。。