将RGB转换为灰度Python

时间:2020-02-04 04:55:02

标签: python python-3.x list opencv python-imaging-library

我一直在将rgb图像转换为灰度图像,下面是代码

import numpy
import glob
import cv2
import csv
import math
import os
import string
from skimage.color import rgb2gray
from PIL import Image

mylist = [f for f in glob.glob("*.jpg")]

for imagefile in mylist:
    img_color = cv2.imread(imagefile)
    image = cv2.resize(img_color,(100,100),interpolation = cv2.INTER_AREA)
    img_gray = rgb2gray(image)
    img_gray.flatten()

我没有将新图像保存到我的当前文件夹中。 谁能帮我这个忙。

4 个答案:

答案 0 :(得分:2)

我认为是因为skimage。你为什么不只使用opencv。

import numpy
import glob
import cv2
import csv
import math
import os
import string
from skimage.color import rgb2gray
from PIL import Image

mylist = [f for f in glob.glob("*.jpg")]

for imagefile in mylist:
    img_color = cv2.imread(imagefile)
    image = cv2.resize(img_color,(100,100),interpolation = cv2.INTER_AREA)
    img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    #img_gray = rgb2gray(image)
    img_gray.flatten()
    cv2.imwrite("gray"+imagefile,img_gray)

答案 1 :(得分:0)

对我来说,用枕头做这项工作将是最有效的方法。

from PIL import Image
img = Image.open('image.png').convert('LA')
img.save('greyscale.png')

您可以参考https://stackoverflow.com/a/45338831/9851541

还可以尝试

import imageio
import numpy as np
import matplotlib.pyplot as plt

pic = imageio.imread('DemoImage.png')
gray = lambda rgb : np.dot(rgb[... , :3] , [0.299 , 0.587, 0.114]) 
gray = gray(pic)  
plt.imshow(gray, cmap = plt.get_cmap(name = 'gray'))

答案 2 :(得分:0)

如果您愿意,也可以一步一步完成此操作,方法是添加一个附加参数,如下所示:

gray = cv2.imread(imagefile, cv2.IMREAD_GRAYSCALE)
cv2.imshow('gray', gray)

答案 3 :(得分:0)

基本上,您需要添加用于保存图像文件的代码:

import numpy
import glob
import cv2
import csv
import math
import os
import string
from skimage.color import rgb2gray
from skimage.io import imsave    # skimage method for saving image
from PIL import Image

mylist = [f for f in glob.glob("*.jpg")]

for imagefile in mylist:
    img_color = cv2.imread(imagefile)
    image = cv2.resize(img_color,(100,100),interpolation = cv2.INTER_AREA)
    img_gray = rgb2gray(image)
    img_gray.flatten()
    imsave("gray"+imagefile, img_gray)  # save the image

或使用opencv

img_gray = img_gray*255
cv2.imwrite("gray"+imagefile, img_gray.astype("uint8"))

但是,如果您想完全在skimage中实现

import glob
from skimage.io import imread, imsave
from skimage.color import rgb2gray
from skimage.transform import resize

mylist = [f for f in glob.glob("*.jpg")]

for imagefile in mylist:
    img_color = imread(imagefile)
    image = resize(img_color, (100, 100))
    img_gray = rgb2gray(image)
    img_gray.flatten()
    imsave("gray" + imagefile, img_gray)