读取图片文件、处理和保存

  • 通过Tensorflow进行图片读取和显示
    一、使用 tf.read_file(path) # path为图片路径

    	import tensorflow as tf
    	image_contents = tf.read_file(path)   # 读取文件
    
        image = tf.image.decode_jpeg(image_contents, channels=3)    # 图片解码,识别jpg图片,此时类型为tensor类型,若需要输出,需要通过eval输出
        plt.imshow(image.eval(session=sess))
    

    二、使用tf.gfile.FastGFile(path,'rb').read() # path为图片路径

    	import tensorflow as tf
    	# 获取原始图像
        image_raw_data=tf.gfile.FastGFile(path,'rb').read()
        # 对图形进行解码,转化为三维矩阵
        image=tf.image.decode_jpeg(image_raw_data)
        plt.imshow(image.eval(session=sess))
    
  • 通过scipy进行图片读取和显示

    	import scipy
    	image_contents = scipy.misc.imread(path)
    	plt.imshow(image_contents)
    
  • 通过scipy进行图像修改

    	# 修改图像shape
    	image=scipy.misc.imresize(image_contents,shape)
    	plt.imshow(image)
    
  • 使用Tensorflow进行图像处理

    • 图片 缩放

      	# 用双线性插值法将图像缩放到指定尺寸,method值为0
          resized1 = tf.image.resize_images(image, [256, 256], method=0)
          # 最近邻插值,method值为1
          resized2 = tf.image.resize_images(image, [256, 256], method=1)
          # 双立方插值,method值为2
          resized3 = tf.image.resize_images(image, [256, 256], method=2)
          # 像素区域插值,method值为3
          resized4 = tf.image.resize_images(image, [256, 256], method=3)
      	
      	# 图像显示,需先进行图像编码转换
      	resized1 = np.asarray(resized1.eval(session=sess), dtype='uint8')
          resized2 = np.asarray(resized2.eval(session=sess), dtype='uint8')
          resized3 = np.asarray(resized3.eval(session=sess), dtype='uint8')
          resized4 = np.asarray(resized4.eval(session=sess), dtype='uint8')
          # 图像显示
          plt.imshow(resized1)
          plt.imshow(resized2)
          plt.imshow(resized3)
          plt.imshow(resized4)
      
    • 图像裁剪 填充

      	# 剪裁,根据原图像尺寸进行判断,若原图像大于该尺寸,则会剪裁,若图像小于该尺寸,就会填充,缺失部分用黑块补齐
          croped = tf.image.resize_image_with_crop_or_pad(image, 100, 100)
          # 填充
          padded = tf.image.resize_image_with_crop_or_pad(image, 2000, 2000)
          # 随机剪裁,前提是目标图像的尺寸大于定义的该尺寸
          random_croped = tf.random_crop(image, [100, 100, 3])
      	
      	# 图像显示
      	plt.imshow(croped.eval(session=sess))
      	plt.imshow(padded.eval(session=sess))
      	plt.imshow(random_croped.eval(session=sess))
      
    • 图片翻转

      	 # 水平翻转
           flip_left_right = tf.image.flip_left_right(image)
           # 上下翻转
           flip_up_down = tf.image.flip_up_down(image)
      	
      	 # 图片显示
      	 plt.imshow(flip_left_right.eval(session=sess))
      	 plt.imshow(flip_up_down.eval(session=sess))
      
    • 改变图片对比度

      	# 改变对比度,图像对比度变为原来的该倍数,如0.5,变为原来的二分之一,2,变为原来的两倍
          constrast = tf.image.adjust_contrast(image, 0.5)
          # 在lower和upper这个范围内随机调整图像对比度
          constrast_1=tf.image.random_contrast(image,lower=0.2,upper=3)
      	
      	# 图片显示
      	plt.imshow(constrast.eval(session=sess))
      	plt.imshow(constrast_1.eval(session=sess))
      
    • 白化处理

      	# 白化处理,将像素值转化为零均值和单位方差
          standardization = tf.image.per_image_standardization(image)
          
          # tensorflow函数处理后图片存储数据为float32格式,需要转化为uint8才能正常打开图片
          standardization = np.asarray(standardization.eval(session=sess), dtype='uint8')
      	
      	# 图片显示
      	plt.imshow(standardization)
      
读取图片文件、处理和保存读取图片文件、处理和保存 木偶人——puppet 发布了48 篇原创文章 · 获赞 12 · 访问量 9208 私信 关注
上一篇:opencv2 使用imshow 出现 SystemError: <built-in function imshow> returned NULL without setting an error


下一篇:【MATLAB Image Processing Toolbox 入门教程七】“导入、导出和转换”之“图像类型转换Ⅱ——使用阈值法转换为二值图像”