圖像彩色化python實現(Tkinter、ImageTk)1

1.Python Tkinter 設計界面簡單樸素

創建窗口->設置標題->窗口大小->窗口是否可變->將窗口放置於屏幕中央(獲取屏幕尺寸以計算佈局參數,使窗口居於中央)

涉及屬性有:title(設置窗口標題)、 geometry(設置窗口大小)、resizable(設置窗口是否可以變化)

僅有窗口並不能實現交互,還需要控件,Tkinter 提供了各種控件,如按鈕、標籤和文本框。

eg:ttk.Button(root, text="上傳圖片", command=clickMe) 

        tkinter.Label(root, text = '輸出圖像')

2.tensor=tf.constant([1, 2]):創建常量的函數

https://blog.csdn.net/csdn_jiayu/article/details/82155224

3.函數解釋:

  • tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)是TensorFlow裏面實現卷積的函數

input : 輸入的要做卷積的圖片,要求爲一個張量,shape爲 [ batch, in_height, in_weight, in_channel ],其中batch爲圖片的數量,in_height 爲圖片高度,in_weight 爲圖片寬度,in_channel 爲圖片的通道數,灰度圖該值爲1,RGB彩色圖爲3。
filter: 卷積核,要求是一個張量,shape爲 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 爲卷積核高度,filter_weight 爲卷積核寬度,in_channel 是圖像通道數 ,和 input 的 in_channel 保持一致,out_channel 是卷積核數量。
strides: 卷積時在圖像每一維的步長,這是一個一維的向量,[ 1, strides, strides, 1],第一位和最後一位固定必須是1
padding: string類型,值爲“SAME” 和 “VALID”,表示的是卷積的形式,是否考慮邊界。"SAME"是考慮邊界,不足的時候用0去填充周圍,"VALID"則不考慮
use_cudnn_on_gpu: bool類型,是否使用cudnn加速,默認爲true

eg:temp = tf.nn.conv2d(rgb, rgb2yuv_filter, [1, 1, 1, 1], 'SAME')

一張3×3單通道的圖像(對應的shape:[1,3,3,1]),用一個1×1的卷積核([1,1,1,1])去做卷積,會得到一張3×3的feature map

  • tf.nn.bias_add(value,bias,name=None):將偏差項bias加到value上。可以看出是tf.add的一個特例,其中bias必須是一維的,value可以是任意維度。
  •  tf.Variable((initializer,name):參數initializer是初始化參數,name是可自定義的變量名稱,用於構造函數需要變量的初始值

4.Image.open('1.jpg')

PIL(Python Imaging Library Python,圖像處理類庫)提供了通用的圖像處理功能,以及大量有用的基本圖像操作,比如圖像縮放、裁剪、旋轉、顏色轉換等。PIL 是免費的,可以從 http://www.pythonware.com/products/pil/ 下載。利用 PIL 中的函數,我們可以從大多數圖像格式的文件中讀取數據,然後寫入最常見的圖像格式文件中。PIL 中最重要的模塊爲Image。

import Image#導入需要的圖像庫

im=Image.open('/home/Picture/test.jpg')#讀取一張圖片

im.show()#顯示一張圖片

im.save("save.gif","GIF") #保存圖像爲gif格式

Image.new(mode,size)#創建新圖片
Image.new(mode,size,color)
newImg = Image.new("RGBA",(640,480),(0,255,0))#例子
newImg.save("newImg.png","PNG")

Image.blend(img1,img2,alpha) # 兩張圖片相加,這裏alpha表示img1和img2的比例參數

im.point(function) #點操作,這個function接受一個參數,且對圖片中的每一個點執行這個函數
out=im.point(lambdai:i*1.5)#例子:對每個點進行50%的加強

im.format, im.size, im.mode#查看圖像信息

box=(100,100,500,500)#圖片裁剪

#設置要裁剪的區域
region=im.crop(box) #此時,region是一個新的圖像對象。
im.paste(region,box)#圖像黏貼(合併),粘貼box大小的region到原先的圖片對象中。

r,g,b=im.split()#通道分離,分割成三個通道,此時r,g,b分別爲三個圖像對象。
im=Image.merge("RGB",(b,g,r))#通道合併,將b,r兩個通道進行翻轉。

out=img.resize((128,128))#改變圖像的大小,resize成128*128像素大小

out=img.rotate(45) #旋轉圖像,逆時針旋轉45度
region = region.transpose(Image.ROTATE_180)#或者有更方便的

out = im.transpose(Image.FLIP_LEFT_RIGHT)#圖像轉換:左右對換
out = im.transpose(Image.FLIP_TOP_BOTTOM)#上下對換

im=im.convert("RGBA")#圖像類型轉換

im.getpixel((4,4))#獲取某個像素位置的值
img.putpixel((4,4),(255,0,0))#寫某個像素位置的值

ImageTk模塊支持從圖片中創建和修改Tkinter位圖圖像和PhotoImage對象。

  • BitmapImage類

ImageTk.BitmapImage(image, options) :創建一個Tkinter兼容的位圖圖像,它可在Tkinter期望一個圖像對象的任何地方使用。給定圖像的模式必須爲“1”。像素值爲0的像素被認爲是透明的。如果有設置參數,參數會傳遞給Tkinter。最常用的設置選項是前景,用於指定非透明部分的顏色。有關如何指定顏色的信息,請參閱Tkinter文檔。

  • PhotoImage類

ImageTk.PhotoImage(image) :創建一個Tkinter兼容的照片圖像(photo image),它可在Tkinter期望一個圖像對象的任何地方使用。如果圖像是一個RGBA圖像,那麼具有alpha 0的像素就被視爲透明的。

ImageTk.PhotoImage(mode, size):與上面一樣,但是創建一個空的(透明的)照片圖像(photo image)。

5.ha, wa = imga.shape[:2]

img.shape[:2] 取彩色圖片的高、寬

如果img.shape[:3] 取彩色圖片的高、寬、通道

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章