【Tensorflow】画像の読み取り、復号化、表示、処理、符号化、保存

6047 ワード

声明、文章の中で他の人の内容を参考にして、すべてすでに原文のリンクを明記しました.
Tensorflow画像の読み取り、復号化、表示、処理、符号化、保存
1.Tensorflow画像ファイルを読み込んだ後、なぜ復号するのですか?私たちがよく見る画像フォーマットはあります.bmp,.gif,.jpg,.png等,而.bmpフォーマットの画像は圧縮されておらず,他の3種類は符号化圧縮フォーマットである.したがって、読み出し後に復号復元を行う.
2.RGB 3チャネルを1枚符号化したカラー画像を3次元マトリクスと見なすことができ、マトリクス内の異なる位置の数字は画像の画素値を表す.そして、画像が格納されると、これらのマトリクスの数字を直接記録するのではなく、圧縮符号化される.したがって、1枚の画像を3次元マトリクスに復元するプロセスは復号化のプロセスであり、逆に符号化される.実はopencvに詳しいなら、imreadとimwriteは復号と符号化の過程です.https://blog.csdn.net/chaipp0607/article/details/73029923
3.コード例解釈(復号の意味をさらに理解するため)http://yueshi.me/?p=270
""" """
File1 = tf.read_file('image.jpg')
 
""" ,png tf.image.decode_png,
channels=3 RGB,1 """
image = tf.image.decode_jpeg(file1, channels=3)
 
""" ,size=[new_height, new_width]"""
image = tf.image.resize_images(image, size=[32,32])
 
""" float32 , [0,1] ,
  tf.cast(image, tf.float32)/255( 255)"""
image = tf.image.convert_image_dtype(image, tf.float32)

コードfile1 = tf.read_file('image.jpg')の機能:ファイル内のすべてのコンテンツの読み込みと出力:0次元の文字列タイプのテンソル(文字列)出力:画像ファイル内のすべてのコンテンツ(文字列)image = tf.image.decode_jpeg(file1, channels=3)機能:符号化された画像をuint 8またはuint 16タイプのテンソル(2次元または3次元マトリクス)入力に復号する:読み込まれた画像ファイル、0次元の文字列タイプのテンソル(すなわち文字列)出力:uint 8またはuint 16タイプのテンソルchannels=3 RGB画像channels=1階調画像channels=0 jpeg符号化画像を表すチャネル数image = tf.image.resize_images(image, size=[32,32])機能:指定の方法で画像を指定の大きさに調整(この方法で画像が歪む)入力:images:4次元テンソル、[batch,height,width,channels]3次元テンソル、[height,width,channels]size:2つの要素を含む1次元int 32テンソル、[new_height,new_width]出力:新しいsizeの画像(テンソル)image = tf.image.convert_image_dtype(image, tf.float32)機能:データ型を変換し、強制変換する前に値を適切にスケールします.浮動小数点値で表される画像の値は、範囲[0,1]内であるべきである.整数データ型に格納された画像データの値は、maxがそのデータ型の最大の正数である範囲[0,max]であるべきである.
4、Tensorflowで画像を読み取る方法
(1)tfを通過する.gfile.FastGFile()画像ファイルを読み込み(bytesタイプデータを得る)image_raw = tf.gfile.FastGFile(‘test.jpg’,‘rb’).read()#バイナリファイルimg=tfを読み込む.image.decode_jpeg(image_raw)#tfの画像フォーマットtensorに復号
tf.gfileモジュールはtensorflowで一般的なファイルI/O操作を提供します.tf.gfile.FastGFile(filename,mode)関数は、pythonのテキスト操作open()関数と同様に、ファイル操作ハンドルを取得するために使用されます.1番目のパラメータfilenameはファイルパスであり、2番目のパラメータmodeはファイル符号化方式(‘r’:UTF-8符号化;‘rb’:非UTF-8符号化)である.(2)tfを通過する.read_file()画像ファイルを読み込み(stringタイプのtensorを得る)image_value = tf.read_file(‘test.jpg’) img = tf.image.decode_jpeg(image_value,channels=3)(3)scipy.misc.imread()関数画像ファイルを読み込む(ndarrayを得る)img=scipy.misc.imread(‘image/13.png’,mode=‘RGB’)(4)はtfを通過する.train.string_input_producer()+tf.WholeFileReader().read()画像ファイルを読み込む(この方法は読み取った画像データが多すぎて、一度にメモリを読み込めない場合)参考https://www.cnblogs.com/polly333/p/7481685.html(5)画像読取方法はもちろん他の方法もあるがtensorflowでは比較的一般的である
5、Tensorflowにおける画像表示の方法
5.0 tensorとarray tensor回転array:a.eval()array回転tensor:tf.convert_to_tensor(b)画像を表示する場合、tensorでなくarrayであってもよいことに注意する
5.1 tensorflowでMatplotlibで画像を表示するMatplotlib(描画+可視化).MatplotlibはPython 2 D-図面分野で最も広く使用されているスイートである可能性があります.ユーザーがデータを簡単にグラフィックス化し、多様な出力フォーマットを提供することができます.簡単に言えば、散点図、曲線図、ヒストグラム、餅図など、データを可視化することができます.画像の表示と処理を行うことができます.
plt.figure(fig.1)
plt.imshow(image)
plt.show()

コードplt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)の機能を説明します.新しいキャンバス
  • num:画像番号または名前、数字は番号、文字列は名前
  • figsize:figureの幅と高さをインチ単位で指定します.
  • dpi:図形描画オブジェクトの解像度を指定します.すなわち、インチあたりのピクセル数を指定します.デフォルト値は80
  • です.
  • facecolor:背景色
  • edgecolor:枠線色
  • frameon:枠線
  • を表示するかどうかplt.imshow(image,cmap=None)イメージ:描画する画像または配列、tensorがarrayに変換される場合.cmap:カラースペクトル(cormap)、デフォルトではRGB(A)カラー空間として描画されます.
    注意pltが階調図を描くフォーマットは(height,width)でなければならないが、(height,width,1)ではない.カラー画像のフォーマットは(height,width,channels)です.tensorflowが画像データを読み出すと、(height,width,channels)のフォーマット、すなわちカラーマップが(height,width,3)、階調マップが(height,width,1)となるので、この場合pltで直接階調マップを描くとエラー(TypeError:Invalid dimensions for image data)となり、pltで階調マップを描くためにreshapeを(height,width)フォーマットにする必要がある.
    5.2 tensorflowでOpenCVで画像を表示する
  • OpenCV(Open Source Computer Vision Library)
  • OpenCVはオープンソースのコンピュータビジュアルライブラリであり、コンピュータビジュアルアルゴリズムを実現する多くの関数を提供しています(最も基本的なフィルタリングから高度な物体検出までカバーされています).
  • OpenCVはC/C++を用いて開発され、Python、Java、MATLABなどの他の言語のインタフェースも提供されている.
  • OpenCVはプラットフォームにまたがり、Windows、Linux、Mac OS、Android、iOSなどのオペレーティングシステムで実行できます.
  • OpenCVの応用分野は非常に広く、画像接合、画像ノイズ低減、製品品質検査、人間機対話、顔認識、動作認識、動作追跡、無人運転などを含む.
  • OpenCVはまた、正規ベイズ、K近隣、サポートベクトルマシン、決定ツリー、ランダム森林、人工ニューラルネットワークなどの機械学習アルゴリズムを使用することができる機械学習モジュールを提供しています.
  • cv2.namedWindow('image', cv2.WINDOW_KEEPRATIO)
    cv2.imshow('image', img_)
    cv2.waitKey(0)
    
    cv2.namedWindow(winname,flags=None)機能:画像を表示するためのウィンドウを作成し、winnameパラメータでこのウィンドウを参照することができ、ウィンドウのタイトルでもあります.ウィンドウ表示フォーマットcv 2を指定するためにflagsを内蔵.WINDOW_NORMALウィンドウのサイズはcv 2を変更することができる.WINDOW_AUTOSIZEウィンドウサイズは変更不可cv 2.WINDOW_FREERATIO適応比cv 2.WINDOW_KEEPRATIO保持比例空腹cv2.imshow(winname,mat)機能:指定したwinnameウィンドウに表示される画像Matクラスは、画像および他のマトリクスデータを保存するためのデータ構造であり、ここでのmatはarrayタイプ、tensorタイプではない.cv2.waitKey(0)機能:画像表示の持続時間を制御0であれば、キーを任意に押したり、フォークを外したり、プログラムを殺したりすることを知っています.正の整数、例えば25であれば、画像は25秒表示された後に自動的に消えます.
    6、Tensorflowでの画像保存方法
    6.2 tensorflowでmatplotlibで画像を保存するplt.imsave(fname,arr)機能:配列を画像ファイルfnameとして保存する:保存するファイル名(パスと拡張子を含む)、arrayタイプデータ、形状はMxN、MxNx 3(RGB)またはMxNx 4(RGBA)6.1 tensorflowでOpenCVで画像cv2.imwrite(filename,img,params=None)を保存する機能:指定フォルダと指定ファイル名filenameに画像を保存する:保存するファイル名(パスと拡張子を含む)、imgが保存する画像.オプションの3番目のパラメータは、特定のフォーマットについてです.JPEGでは、画像の品質を表し、0~100の整数で表されます.デフォルトは95です.pngの場合、3番目のパラメータは圧縮レベルを表し、デフォルトは3です.
    7、pythonの画像処理モジュールPIL(Python Imaging Library)、Pillow PILはPythonプラットフォーム上の画像処理標準ライブラリで、機能が強く、使用が簡単である.PILのデフォルトはPython 2にのみサポートされています.7、Python 3をサポートする場合.xバージョンでは、PILと互換性のある新しいバージョンであるPillowを使用する必要があります.PillowにはPILよりも多くの新しい特性が追加されています.
    from PIL import Image as im
    
    img = im.open('image/13.png')
    img.show()
    img.save("image/img.png")