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

首先放出原图:

这里写图片描述

1、处理标注框

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)

    # tf.image.draw_bounding_boxes函数要求图像矩阵中的数字为实数,
    # 所以需要先将图像矩阵转化为实数类型(float32,float16)。
    image_data = tf.image.convert_image_dtype(image_data, tf.float32)

    # tf.image.draw_bounding_boxes函数的输入是一个batch的数据,
    # 也就是多张图像组成的四维矩阵,多以需要将解码之后的图像矩阵加一维。
    batched = tf.expand_dims(image_data, 0)

    # 给出每一张图像的标注框,一个标注框有四个数字,分别是[y_min,x_min,y_max,x_max].
    # 注意,这是一个三维数组!
    # 给出的数字都是表示图像的相对位置,上述的数字的范围均是[0,1]。
    # 例如在180x267图像中,[0.35,0.47,0.5,0.56]代表了(63,125)到(90,150)的图像。
    boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7],[0.35,0.47,0.5,0.56]]])

    # 使用函数加标注框。
    result = tf.image.draw_bounding_boxes(batched, boxes)

    # 显示图像。这里只显示第一张图片,因为我们只输入了一张图像。
    cv2Show("result", result[0])

    cv2.waitKey()

程序运行结果如下:

这里写图片描述

这里写图片描述

2、随机截取图像

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)

    image_data = tf.image.convert_image_dtype(image_data, tf.float32)

    # tf.image.draw_bounding_boxes函数的输入是一个batch的数据,
    # 也就是多张图像组成的四维矩阵,多以需要将解码之后的图像矩阵加一维。
    batched = tf.expand_dims(image_data, 0)

    # 给出每一张图像的标注框,一个标注框有四个数字,分别是[y_min,x_min,y_max,x_max].
    # 注意,这是一个三维数组!
    # 给出的数字都是表示图像的相对位置,上述的数字的范围均是[0,1]。
    # 例如在180x267图像中,[0.35,0.47,0.5,0.56]代表了(63,125)到(90,150)的图像。
    boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7],[0.35,0.47,0.5,0.56]]])

    # 可以通过提供标注框的方式来告诉随机截取图像的算法哪些部分是“有信息量”的。
    begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(tf.shape(image_data), bounding_boxes=boxes)

    # 通过标注框可视化随机截取的图像。
    image_with_box = tf.image.draw_bounding_boxes(batched,bbox_for_draw)

    # 随机截取出来的图像,因为算法带有随机成分,所以每次得到的结果会有所不同。
    distorted_image = tf.slice(image_data,begin=begin,size=size)

    # 显示截取的图像。
    cv2Show("result", distorted_image)

    cv2.waitKey()

程序运行结果如下:

这里写图片描述

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值