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

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

首先是使用的原始图片:

这里写图片描述

import tensorflow as tf
import 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

下面是程序的运行截图:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值