Преобразование RGB в оттенки серого python - PullRequest
0 голосов
/ 04 февраля 2020

Я конвертирую изображения 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 ]

2 голосов
/ 04 февраля 2020

Я думаю, это из-за лыжного мага. почему вы не используете просто 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)
0 голосов
/ 04 февраля 2020

В основном вам нужно добавить код для сохранения файла изображения:

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)
0 голосов
/ 04 февраля 2020

Вы также можете сделать это за один шаг, если хотите, добавив дополнительный параметр для imread следующим образом:

gray = cv2.imread(imagefile, cv2.IMREAD_GRAYSCALE)
cv2.imshow('gray', gray)
0 голосов
/ 04 февраля 2020

Выполнение этой задачи с Подушкой будет для меня наиболее эффективным способом.

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

Вы можете обратиться к { ссылка }

Также вы можете попробуйте

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'))
...