Tensorflow深度学习之十一:基础图像处理

来源:互联网 发布:sql server怎么导入表 编辑:程序博客网 时间:2024/06/10 03:05

OpenCV是一个十分强大的视觉库,tensorflow也提供了十分强大的图片处理函数,下面是一个简单的例子来说明使用tensorflow和opencv两个工具进行深度学习程序的设计。

首先是使用的原始图片:

这里写图片描述

import tensorflow as tfimport cv2# 这里定义一个tensorflow读取的图片格式转换为opencv读取的图片格式的函数# 请注意:# 在tensorflow中,一个像素点的颜色顺序是R,G,B。# 在opencv中,一个像素点的颜色顺序是B,G,R。# 因此,我们循环遍历每一个像素点,将第0位的颜色和第2位的颜色数值换一下即可。# 第一个参数name:将要显示的窗口名称。# 第二个参数image:储存图片信息的一个tensor。def cv2Show(name="", image=None):    # 获取矩阵信息    np = image.eval()    # 获取行数列数    row, col = len(np),len(np[1])    # 两重循环遍历    for i in range(row):        for j in range(col):            # 交换数值            tmp = np[i][j][0]            np[i][j][0] = np[i][j][2]            np[i][j][2] = tmp    # 显示图片    cv2.imshow(name,np)    pass# tensorflow会话with tf.Session() as sess:    # 以二进制的方式读取图片。    image_raw_data = tf.gfile.FastGFile("bus.jpg", "rb").read()    # 按照jpeg的格式解码图片。    image_data = tf.image.decode_jpeg(image_raw_data)    # 显示原图片。    cv2Show("Read by Tensorflow+Dispalyed by Opencv",image_data)    # opencv读取同一张图片。    img = cv2.imread("bus.jpg")    # opencv显示图片。    cv2.imshow("Read by Opencv+Displayed by Opencv",img)    # 重新调整大小。    # resize_images(images,size,method=ResizeMethod.BILINEAR,align_corners=False)'    # 参数如下:    # images:需要调整的图片,通常是一个tensor    # size:调整之后的大小,一般是一个长度为2的list    # method:调整大小使用的方法,这里我们使用最近邻居法。    # align_corner:是否对齐四角。    resized = tf.image.resize_images(image_data,[300,300],method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)    # 显示图片。    cv2Show("Resized:Nearest Neighbor",resized)    # 调整大小,采用切割或者填充的方式。    # 如果原始图像的尺寸大于目标图像,那么这个函数会自动切割原始图像中的居中的部分。    # 如果原始图像的尺寸小于目标图像,那么这个函数会自动在原始图像的周围采用全0填充。    # resize_image_with_crop_or_pad(image, target_height, target_width)    # image:待调整的图像。    # target_height:目标图像的高度。    # target_width:目标图像的宽度。    cropped = tf.image.resize_image_with_crop_or_pad(image_data,300,300)    cv2Show("After being cropped",cropped)    padded = tf.image.resize_image_with_crop_or_pad(image_data,600,900)    cv2Show("After being padded",padded)    # 通过比例调整图像大小。    # central_crop(image, central_fraction)    # image:待调整的图像。    # central_fraction:比例,是一个(0,1]之间的数字,表示需要调整的比例。这里我们选择的比例是0.5,即50%。    central_cropped = tf.image.central_crop(image_data,0.5)    cv2Show("After being central-cropped",central_cropped)    cv2.waitKey()

使用的函数功能,参数等信息在代码中均已写明。

下面的表格实在使用调整大小的函数时常常需要使用的Method取值。

Method 图像大小的调整算法 值 0 双线性插值法 tf.image.ResizeMethod.BILINEAR 1 最近邻居法 tf.image.ResizeMethod.NEAREST_NEIGHBOR 2 双三次插值法 tf.image.ResizeMethod.BICUBIC 3 面积插值法 tf.image.ResizeMethod.AREA

下面是程序的运行截图:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

原创粉丝点击