开发者社区> 贾志刚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用TensorFlow进行简单的图像处理

简介: 使用TensorFlow进行简单的图像处理 概述 作为计算机视觉开发者,使用TensorFlow进行简单的图像处理是基本技能,而TensorFlow在tf.image包中支持对图像的常见的操作包括: 亮度调整 对比度调整 饱和度调整 图像采样插值放缩 色彩空间转换 Gamma校正 标准化 图像的读入与显示我们通过OpenCV来实现,这里需要注意一点,OpenCV中图像三个通道是BGR,如果你是通过tensorflow读取的话三个通过顺序是RGB。
+关注继续查看

使用TensorFlow进行简单的图像处理

概述

作为计算机视觉开发者,使用TensorFlow进行简单的图像处理是基本技能,而TensorFlow在tf.image包中支持对图像的常见的操作包括:

  • 亮度调整
  • 对比度调整
  • 饱和度调整
  • 图像采样插值放缩
  • 色彩空间转换
  • Gamma校正
  • 标准化

图像的读入与显示我们通过OpenCV来实现,这里需要注意一点,OpenCV中图像三个通道是BGR,如果你是通过tensorflow读取的话三个通过顺序是RGB。图像读取的代码如下:

1.opencv方式

src = cv.imread("D:/vcprojects/images/meinv.png")

2.tensorflow方式

jpg = tf.read_file("D:/vcprojects/images/yuan_test.png")
img = tf.image.decode_jpeg(jpg, channels=3)

3.使用OpenCV显示图像

def show_image(image, title='input'):
    print("result : \n", image)
    cv.namedWindow(title, cv.WINDOW_AUTOSIZE)
    cv.imshow(title, image)
    cv.waitKey(0)
    cv.destroyAllWindows()

原图显示如下:
这里写图片描述

1.放缩图像

支持三种方式,分别是临界点插值、双线性插值与双立方插值,不过我发现在使用双立方插值的时候,tensorflow处理之后图像总是会出现一些噪点,这个算不算它的BUG
- tf.image.resize_nearest_neighbor # 临界点插值
- tf.image.resize_bilinear # 双线性插值
- tf.image.resize_bicubic # 双立方插值算法
演示代码如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
cv.imshow("input", src)
h, w, depth = src.shape
src = np.expand_dims(src, 0)
print(src.shape)
bi_image = tf.image.resize_bilinear(src, size=[h*2, w*2])
bi_image = tf.squeeze(bi_image)
bi_result = sess.run(bi_image)
bi_result = np.uint8(bi_result)
show_image(bi_result,"bilinear-zoom")

显示图像如下:
这里写图片描述

2.图像亮度调整

图像亮度是图像基本属性之一,tensorflow支持两种方式API对图像亮度进行调整
- tf.image.adjust_brightness
- tf.image.random_brightness
使用上述API的时候需要对图像进行维度添加为四维的tensor数据,完整的图像亮度调整的代码如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
src = np.expand_dims(src, 0)
brightness = tf.image.adjust_brightness(src, delta=.5)
brightness = tf.squeeze(brightness)
result = sess.run(brightness)
result = np.uint8(result)
show_image(result, "brightness demo")

显示图像如下:
这里写图片描述

3.图像对比度调整

图像对比度是图像基本属性之一,tensorflow支持两种方式API对图像对比度进行调整
- tf.image.adjust_contrast
- tf.image.random_contrast
前面一种全局调整,后面一种方式是随机调整,对比度调整的代码演示如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
src = np.expand_dims(src, 0)
contrast = tf.image.adjust_contrast(src, contrast_factor=2.2)
contrast = tf.squeeze(contrast)
result = sess.run(contrast)
result = np.uint8(result)
show_image(result, "contrast demo")

显示图像如下:
这里写图片描述

4.图像gamma校正

伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像的对比度。相关API为:
- tf.image.adjust_gamma
常见gamma的取值范围为0.05~5之间,tensorflow实现gamma校正的代码演示如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
src = np.expand_dims(src, 0)
contrast = tf.image.adjust_gamma(src, gain=1.0, gamma=4.2)
contrast = tf.squeeze(contrast)
result = sess.run(contrast)
result = np.uint8(result)
show_image(result, "gamma demo")

显示图像如下:
这里写图片描述

5.图像饱和度调整

图像饱和度是图像HSV色彩空间最常见的指标之一,通过调整图像饱和度可以得到更加自然光泽的图像,tensorflow中饱和度调整的API如下:

  • tf.image.adjust_saturation

常见的饱和度调整范围在0~5之间取值即可,演示代码如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
contrast = tf.image.adjust_saturation(src, saturation_factor=2.2)
result = sess.run(contrast)
result = np.uint8(result)
show_image(result, "saturation demo")

这里要特别说明一下,饱和度调整不支持4D tensor对象,所以读入的RGB图像即可“`。无需再次进行维度增加操作。最终调整之后的演示图像如下:
这里写图片描述
6.图像标准化

这个在tensorflow中对图像数据训练之前,经常会进行此步操作,它跟归一化是有区别的。归一化的图像直方图不会改变,标准化会改变图像直方图分布,标准化API如下:
- tf.image.per_image_standardization
图像标准化实现代码如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
contrast = tf.image.per_image_standardization(src)
result = sess.run(contrast)
result = np.uint8(result)
show_image(result, "standardization demo")

演示结果如下:
这里写图片描述
7.图像色彩空间转换

tensorflow支持常见图像色彩空间转换,包括RGB、HSV、灰度色彩空间,相关API如下:
- tf.image.rgb_ to_hsv
- tf.image.rgb_ to_grayscale
- tf.image.hsv_ to_rgb
将图像从RGB色彩空间转换到灰度空间的代码演示如下:

src = cv.imread("D:/vcprojects/images/meinv.png")
gray = tf.image.rgb_to_grayscale(src)
result = sess.run(gray)
result = np.uint8(result)
show_image(result, "gray - demo")

结果显示如下:
这里写图片描述

小结

tensorflow中还提供一些其他的图像操作相关API,比如裁剪、填充、随机调整亮度、对比度等,还有非最大信号压制等操作,感兴趣的可以自己进一步学习。
欢迎关注微信公众号
【OpenCV学堂】

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
TensorFlow学习笔记--自定义图像识别
TensorFlow学习笔记--自定义图像识别
114 0
使用深度学习进行图像去噪
使用深度学习进行图像去噪
181 0
DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略(三)
DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略
49 0
TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模
TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模
75 0
DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略(二)
DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略
90 0
Tensorflow V2 图像识别模型训练流程
这里以 TinyMind 《汉字书法识别》比赛数据为例,展示使用 Tensorflow V2.0 进行图像数据分类模型训练的整个流程。
195 0
最简单的 TensorFlow 代码,TensorFlow Hello World 。
# -*- coding:utf-8 -*- from __future__ import print_function ''' HelloWorld example using TensorFlow library.
800 0
阿里云机器学习技术分享1——图像识别之TensorFlow实现方法【视频+PPT】
阿里云AI之图像识别技术是如何实现的!?视频+PPT干货奉上 讲师简介:赵昆 阿里巴巴机器学习技术专家 欢迎加入阿里云机器学习大家庭,**钉钉群:11768691** , QQ群:567810612 一、阿里云机器学习之图像识别实践-基础篇: 观看视频:http://cloud.
3505 0
+关注
贾志刚
2004毕业于山东大学齐鲁软件学院,软件工程专业。主要专注于图像处理算法学习与研究,计算机视觉技术开发应用,深度学习在计算机视觉领域应用。两本书籍《Java数字图像处理-编程技巧与应用实践》、《OpenCV On Android编程实践》作者
252
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载