it-swarm.com.de

Wandeln Sie RGB in Schwarz um OR Weiß

Wie würde ich ein RGB-Bild in Python aufnehmen und es in schwarzes OR Weiß konvertieren? Keine Graustufen, ich möchte, dass jedes Pixel entweder vollständig schwarz (0, 0, 0) oder vollständig weiß (255, 255, 255) ist.

Gibt es dafür in den gängigen Python-Bildverarbeitungsbibliotheken integrierte Funktionen? Wenn nicht, wäre es der beste Weg, einfach durch jedes Pixel zu gehen, wenn es näher an Weiß ist, an Weiß, an Schwarz, an Schwarz.

35
Tom

Skalieren zu Schwarzweiß

Wandeln Sie in Graustufen um und skalieren Sie dann in Weiß oder Schwarz (je nachdem, was am nächsten ist).

Original:

meow meow tied up cat

Ergebnis:

Black and white Cat, Pure

Pure Pillow-Implementierung

Installieren Sie pillow, falls Sie noch nicht

$ pip install pillow

Kissen (oder PIL) kann Ihnen helfen, effektiv mit Bildern zu arbeiten.

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")

Alternativ können Sie Pillow mit numpy verwenden. 

Kissen + Wummeliger Bitmasken-Ansatz

Sie müssen numpy installieren:

$ pip install numpy

Numpy benötigt eine Kopie des Arrays, um damit arbeiten zu können, aber das Ergebnis ist das gleiche.

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")

Schwarz und Weiß mit Kissen, mit Dithering

Mit Kissen können Sie es direkt in Schwarzweiß umwandeln. Es wird aussehen, als hätte es Grauschattierungen, aber dein Gehirn betrügt dich! (Schwarz und Weiß nebeneinander sehen aus wie grau)

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:

meow meow color cat

Umgewandelt:

meow meow black and white cat

Schwarz und Weiß mit Kissen, ohne Dithering

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')
77
Kyle Kelley

Ich würde vorschlagen, in Graustufen umzuwandeln und dann einfach eine Schwelle (auf halbem Weg oder Mittelwert oder Metschi, wenn Sie dies wünschen) anwenden.

from PIL import Image

col = Image.open('myimage.jpg')
gry = col.convert('L')
grarray = np.asarray(gry)
bw = (grarray > grarray.mean())*255
imshow(bw)
4
askewchan

Und Sie können colorsys (in der Standardbibliothek) verwenden, um rgb in hls umzuwandeln und den Helligkeitswert zum Bestimmen von Schwarz/Weiß zu verwenden:

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)
1
monkut

Kissen mit Zittern

Mit Kissen können Sie es direkt in Schwarzweiß umwandeln. Es wird aussehen, als hätte es Grauschattierungen, aber dein Gehirn betrügt dich! (Schwarz und Weiß nebeneinander sehen aus wie grau)

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:

meow meow color cat

Umgewandelt:

meow meow black and white cat

1
Kyle Kelley
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)
0
Nfekih

Hier ist der Code zum Erstellen von Binärbildern mit opencv-python:

img = cv2.imread('in.jpg',2)

ret, bw_img = cv2.threshold(img,127,255,cv2.THRESH_BINARY)

cv2.imshow("Output - Binary Image",bw_img)
0
Maifee Ul Asad

Opencv verwenden Sie können rgb leicht in ein binäres Bild konvertieren

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)
0
shawon