Comment puis-je prendre une image RVB en Python et la convertir en noir OR blanc? Pas de niveaux de gris, je veux que chaque pixel soit entièrement noir (0, 0, 0) ou entièrement blanc (255, 255, 255).
Existe-t-il une fonctionnalité intégrée pour cela dans les bibliothèques de traitement d’images Python les plus répandues? Sinon, le meilleur moyen serait-il de simplement parcourir chaque pixel, s'il est plus proche du blanc, définissez-le sur blanc, s'il est plus proche du noir, définissez-le sur noir?
Convertissez en niveaux de gris, puis redimensionnez en blanc ou en noir (selon ce qui est le plus proche).
Original:
Résultat:
Installez pillow
si vous n'avez pas déjà:
$ pip install pillow
Pillow (ou PIL) peut vous aider à travailler efficacement avec des images.
from PIL import Image
col = Image.open("cat-tied-icon.png")
gray = col.convert('L')
bw = gray.point(lambda x: 0 if x<128 else 255, '1')
bw.save("result_bw.png")
Alternativement, vous pouvez utiliser Pillow with numpy .
Vous aurez besoin d'installer numpy:
$ pip install numpy
Numpy a besoin d'une copie du tableau pour fonctionner, mais le résultat est le même.
from PIL import Image
import numpy as np
col = Image.open("cat-tied-icon.png")
gray = col.convert('L')
# Let numpy do the heavy lifting for converting pixels to pure black or white
bw = np.asarray(gray).copy()
# Pixel range is 0...255, 256/2 = 128
bw[bw < 128] = 0 # Black
bw[bw >= 128] = 255 # White
# Now we put it back in Pillow/PIL land
imfile = Image.fromarray(bw)
imfile.save("result_bw.png")
En utilisant pillow , vous pouvez le convertir directement en noir et blanc. On dirait qu'il a des nuances de gris mais votre cerveau vous trompe! (Le noir et le blanc rapprochés ressemblent au gris)
from PIL import Image
image_file = Image.open("cat-tied-icon.png") # open colour image
image_file = image_file.convert('1') # convert image to black and white
image_file.save('/tmp/result.png')
Original:
Converti:
from PIL import Image
image_file = Image.open("cat-tied-icon.png") # open color image
image_file = image_file.convert('1', dither=Image.NONE) # convert image to black and white
image_file.save('/tmp/result.png')
Je suggérerais de convertir en niveaux de gris, puis d’appliquer simplement un seuil (à mi-chemin, moyen ou moyen, si vous le souhaitez).
from PIL import Image
col = Image.open('myimage.jpg')
gry = col.convert('L')
grarray = np.asarray(gry)
bw = (grarray > grarray.mean())*255
imshow(bw)
Et vous pouvez utiliser colorsys
(dans la bibliothèque standard) pour convertir rgb en hls et utiliser la valeur de luminosité pour déterminer le noir/blanc:
import colorsys
# convert rgb values from 0-255 to %
r = 120/255.0
g = 29/255.0
b = 200/255.0
h, l, s = colorsys.rgb_to_hls(r, g, b)
if l >= .5:
# color is lighter
result_rgb = (255, 255, 255)
Elif l < .5:
# color is darker
result_rgb = (0,0,0)
En utilisant pillow , vous pouvez le convertir directement en noir et blanc. On dirait qu'il a des nuances de gris mais votre cerveau vous trompe! (Le noir et le blanc rapprochés ressemblent au gris)
from PIL import Image
image_file = Image.open("cat-tied-icon.png") # open colour image
image_file = image_file.convert('1') # convert image to black and white
image_file.save('/tmp/result.png')
Original:
Converti:
img_rgb = cv2.imread('image.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
(threshi, img_bw) = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
Utiliser opencv Vous pouvez facilement convertir RGB en image binaire
import cv2
%matplotlib inline
import matplotlib.pyplot as plt
from skimage import io
from PIL import Image
import numpy as np
img = io.imread('http://www.bogotobogo.com/Matlab/images/MATLAB_DEMO_IMAGES/football.jpg')
img = cv2.cvtColor(img, cv2.IMREAD_COLOR)
imR=img[:,:,0] #only taking gray channel
print(img.shape)
plt.imshow(imR, cmap=plt.get_cmap('gray'))
#Gray Image
plt.imshow(imR)
plt.title('my picture')
plt.show()
#Histogram Analyze
imgg=imR
hist = cv2.calcHist([imgg],[0],None,[256],[0,256])
plt.hist(imgg.ravel(),256,[0,256])
# show the plotting graph of an image
plt.show()
#Black And White
height,width=imgg.shape
for i in range(0,height):
for j in range(0,width):
if(imgg[i][j]>60):
imgg[i][j]=255
else:
imgg[i][j]=0
plt.imshow(imgg)