zoukankan      html  css  js  c++  java
  • tensorflow图像处理函数(1)

    1、tensorflow中对jpeg格式图像的编码/解码函数:

    import matplotlib.pyplot as plt
    import tensorflow as tf
    image_raw_data=tf.gfile.FastGFile('/Users/jk/Downloads/timg.jpeg','rb').read()
    with tf.Session() as sess:
        img_data=tf.image.decode_jpeg(image_raw_data)    #通过tf.img.decode_jpeg函数对jpeg格式的图像进行解码,解码后的结果为一个张量
        print(img_data.eval())      #输出解码后的三维矩阵
        plt.imshow(img_data.eval())
        plt.show()
        img_data=tf.image.convert_image_dtype(img_data,dtype=tf.uint8)    
        encode_image=tf.image.encode_jpeg(img_data)     #将图像的三维矩阵重新按照jpeg格式编码存入文件,打开该图像可以得到和原始图像一样的图像
        with tf.gfile.GFile('/Users/jk/Downloads/output','wb') as f:   #将文件写入目标路径,生成图像文件
            f.write(encode_image.eval())

     2、图像大小调整(和上面的类似,仅多了图像大小调整的部分,下面的例子将类似):

    import matplotlib.pyplot as plt
    import tensorflow as tf
    image_raw_data=tf.gfile.FastGFile('/Users/jk/Downloads/timg.jpeg','rb').read()
    with tf.Session() as sess:
        img_data=tf.image.decode_jpeg(image_raw_data)
        print(img_data.eval())
        plt.imshow(img_data.eval())
        plt.show()
        img_data=tf.image.convert_image_dtype(img_data,dtype=tf.uint8)
        resized=tf.image.resize_images(img_data,size=[300,300],method=1)    #将图像大小转为[300,300],图像深度在没有明确设置前会是?,
        print(resized.get_shape())
        resized=tf.image.convert_image_dtype(resized,dtype=tf.uint8)     #数据预处理时候会把dtype转为tf.float32,因此需要手动转回tf.uint8
        encode_image=tf.image.encode_jpeg(resized)
        with tf.gfile.GFile('/Users/jk/Downloads/output','wb') as f:    #返回调整大小后的图像
            f.write(encode_image.eval())      

     通过tf.image.resize_image_with_crop_or_pad函数来调整图像大小的功能:

    croped=tf.image.resize_image_with_crop_or_pad(img_data,3000,3000)  #将图像数据扩充为3000x3000,若图像大小大于原始数据,则使用全0填充。

    通过tf.image.central_crop函数来对图像按比例进行裁剪:

    central_cropped=tf.image.central_crop(img_data,0.8)   #按比例进行缩小,后面的比例必须是一个(0,1]的实数。

    通过tf.image.flip_up_down函数来进行图像翻转:

    flipped=tf.image.flip_up_down(img_data)   #上下翻转
    flipped=tf.image.flip_left_right(img_data)   #左右翻转
    flipped=tf.image.transpose_image(img_data)   #沿对角线翻转

    3、图像的色彩调整

    通过tf.image.adjust_brightness函数进行色彩调整:

    adjusted=tf.image.adjust_brightness(img_data,-0.5)  #将图像的亮度-0.5
    adjusted=tf.image.adjust_brightness(img_data,+0.5) #将图像的亮度+0.5
    adjusted=tf.image.random_brightness(img_data,max_delta)    #将图像的亮度在[-max_delta,max_delta]范围内随机调整

    通过tf.image.adjust_contrast函数来调整图像的对比度:

    adjusted=tf.image.adjust_contrast(img_data,5)   #将图像的对比度+5
    adjusted=tf.image.random_contrast(img_data,lower,upper)  #在[lower, upper]范围内随机调整图像的对比度

    通过tf.image.adjust_hue函数来调整图像的色相:

    adjusted=tf.image.adjust_hue(img_data,0.5)   #将图像的色相加0.5
    adjusted=tf.image.random_hue(img_data,max_delta)   #在[-max_delta,max_delta]范围内随机调整图像的色相

    通过tf.image.adjust_saturation函数调整图像的饱和度:

    adjusted=tf.image.adjust_saturation(img_data,-5)   #将图像的饱和度-5
    adjusted=tf.image.random_saturation(img_data,lower,upper)  #随机调整图像的饱和度

    通过tf.image.per_image_whitening函数来对图像进行标准化:

    adjusted=tf.image.per_image_standardization(img_data)   #对图像进行标准化,转化成亮度均值为0,方差为1.

    4、处理标注框:

    通过tf.image.draw_bounding_boxes函数在图像中加入标注框

    import matplotlib.pyplot as plt
    import tensorflow as tf
    image_raw_data=tf.gfile.FastGFile('/Users/jk/Downloads/timg.jpeg','rb').read()
    with tf.Session() as sess:
        img_data=tf.image.decode_jpeg(image_raw_data)    #通过tf.img.decode_jpeg函数对jpeg格式的图像进行解码,解码后的结果为一个张量
        img_data=tf.image.convert_image_dtype(img_data,dtype=tf.uint8)   
        img_data=tf.image.resize_images(img_data,[180,267],method=1)
        batched=tf.expand_dims(tf.image.convert_image_dtype(img_data,tf.float32),0)
        boxes=tf.constant([[[0.05,0.05,0.9,0.7],[0.35,0.47,0.5,0.56]]])#标注框的表示形式:[y_min, x_min, y_max, x_max],组成部分为3维数组,分别对应[batch, N, 4],左边的boxes的shape为[1,2,4]
        result=tf.image.draw_bounding_boxes(batched,boxes)
        plt.imshow(result[0].eval()) 
        plt.show()

     5、提取标注框内的图像:(不知道为何画出来的标注框和通过标注框截取的内容不一致)

    import matplotlib.pyplot as plt
    import tensorflow as tf
    image_raw_data=tf.gfile.FastGFile('C:/Users/1/Desktop/01.jpg','rb').read()
    with tf.Session() as sess:
        img_data=tf.image.decode_jpeg(image_raw_data)    #通过tf.img.decode_jpeg函数对jpeg格式的图像进行解码,解码后的结果为一个张量
        img_data=tf.image.convert_image_dtype(img_data,dtype=tf.uint8)   
        img_data=tf.image.resize_images(img_data,[180,267],method=1)
        boxes=tf.constant([[[0.35,0.1,0.8,0.7],[0.4,0.47,0.5,0.56]]])          #通过提供标注框的方式告诉随机截图的算法哪些部分是有信息量的
        begin,size,bbox=tf.image.sample_distorted_bounding_box(tf.shape(img_data),bounding_boxes=boxes)       
        batched=tf.expand_dims(tf.image.convert_image_dtype(img_data,tf.float32),0)  #需要增加一维才能画框
        img_with_box=tf.image.draw_bounding_boxes(batched,bbox)         #在原图像的基础上画标注框
        distorted_image=tf.slice(img_data,begin,size)       #截取随机得到的图像
        plt.imshow(distorted_image.eval())
        plt.show()
        plt.imshow(img_with_box[0].eval())
        plt.show()
  • 相关阅读:
    python的模块future用法实例解析
    strcmp函数和memcmp函数的用法区别及联系
    esp8266 smartconfig-智能配网分析和使用及注意事项
    ubuntu 18.04 安装并配置adb
    Markdown的常用方法总结
    mac下使用minicom几个注意事项
    最强Linux shell工具Oh My Zsh 指南
    ESP8266源码分析--打印的基本用法
    atom 在Ubuntu 18.04 上安装及基本使用
    ubuntu 查看端口被占用并删除端口
  • 原文地址:https://www.cnblogs.com/xiaochouk/p/8525006.html
Copyright © 2011-2022 走看看