web-dev-qa-db-ja.com

RGBを黒に変換OR白

PythonでRGBイメージを取得し、それを黒OR白に変換するにはどうすればよいですか?グレースケールではなく、各ピクセルを完全に黒(0、0、0)または完全に白(255、255、255)にする必要があります。

人気のあるPython画像処理ライブラリには、このための組み込み機能はありますか?そうでない場合、最良の方法は、各ピクセルをループすることです。白に近い場合は白に設定し、黒に近い場合は黒に設定しますか?

38
Tom

白黒へのスケーリング

グレースケールに変換してから、白または黒(どちらか近い方)に拡大縮小します。

元の:

meow meow tied up cat

結果:

Black and white Cat, Pure

ピュアピローの実装

pillowをインストールしていない場合:

$ pip install pillow

Pillow (またはPIL)は、画像を効果的に操作するのに役立ちます。

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

または、 numpyPillow を使用できます。

Pillow + Numpy Bitmasksアプローチ

Numpyをインストールする必要があります。

$ pip install numpy

Numpyは操作するために配列のコピーを必要としますが、結果は同じです。

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

ピローを使用したディザリング付きの白黒

pillow を使用すると、直接白黒に変換できます。それは灰色の色合いを持っているように見えますが、あなたの脳はあなたをだましています! (互いに近い黒と白は灰色のように見えます)

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

元の:

meow meow color cat

変換済み:

meow meow black and white cat

枕を使用したディザリングなしの白黒

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

グレースケールに変換してから、しきい値(中間値、または選択した場合は平均値または平均値)を適用することをお勧めします。

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
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)
3
monti

また、colorsys(標準ライブラリ内)を使用してrgbを hls に変換し、明度値を使用して黒/白を決定できます。

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

枕、ディザリング付き

pillow を使用すると、直接白黒に変換できます。それは灰色の色合いを持っているように見えますが、あなたの脳はあなたをだましています! (互いに近い黒と白は灰色のように見えます)

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

元の:

meow meow color cat

変換済み:

meow meow black and white cat

1
Kyle Kelley

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を使用すると、rgbを簡単にバイナリイメージに変換できます

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