图像彩色化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] 取彩色图片的高、宽、通道

发布了40 篇原创文章 · 获赞 3 · 访问量 7599

猜你喜欢

转载自blog.csdn.net/OpenSceneGraph/article/details/100731155