python 3ピクチャを読み出して階調化する4つの方法(OpenCV、PIL.Image、TensorFlow方法)まとめ

1892 ワード

画像を処理するときは、画像を読み取って階調図に変換することが多い.穴に入ったばかりのシロとして、私はこのブログで4つの処理方法を記録しました.
パッケージを最初にインポート:
import numpy as np
import cv2
import tensorflow as tf
from PIL import Image

方法1:OpenCVを使用して画像を読み取りながら、画像を階調図に変換する.
   
import numpy as np
import cv2
import tensorflow as tf
from PIL import Image

運転結果を下図に示します.
方法2:OpenCVを使用して、まず画像を読み取り、階調図に変換します.
   
 img = cv2.imread(imgfile)
    #print(img.shape)
    #print(img)
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Y = 0.299R + 0.587G + 0.114B
    print("cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) :")
    print(' :{}'.format(gray_img.shape))
    print(" :%s" % type(gray_img))
    print(gray_img)

実行結果は次のとおりです.
方法3:PILライブラリのImageモジュールを使用する:
   
img = np.array(Image.open(imgfile).convert('L'), 'f') # , , ,L = 0.299R + 0.587G + 0.114B。'f' float 
    print("Image :")
    print(' :{}'.format(img.shape))
    print(" :%s" % type(img))
    print(img)

実行結果は次のとおりです.
PILライブラリのImageモジュールのconvert()関数を使用する方法については、ブログを参照してください.https://www.2cto.com/kf/201603/492898.html
方法四:TensorFlow方法:
   
with tf.Session() as sess:
        img = tf.read_file(imgfile) # ,
        img_data = tf.image.decode_jpeg(img, channels=3) # 
        #img_data = sess.run(tf.image.decode_jpeg(img, channels=3))
        img_data = sess.run(tf.image.rgb_to_grayscale(img_data)) # 
        print(' :{}'.format(img_data.shape))
        print(" :%s" % type(img_data))
        print(img_data)

実行結果は次のとおりです.
TensorFlowの方法の結果は,上記の3つの方法の処理結果と若干異なることが分かる.したがって、画像を処理する際には、方法の一貫性を保つことが望ましく、この方法で画像を読み取り終わってから、不要なバグが画像処理結果に影響を与えないように、別の方法で画像を処理しないことが望ましい.原文:https://blog.csdn.net/Tony_Stark_Wang/article/details/80006366