python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结


Posted in Python onJuly 04, 2019

在处理图像的时候经常是读取图片以后把图片转换为灰度图。作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法。

首先导入包:

import numpy as np
import cv2
import tensorflow as tf
from PIL import Image

方法一:在使用OpenCV读取图片的同时将图片转换为灰度图:

img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)
  print("cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)结果如下:")
  print('大小:{}'.format(img.shape))
  print("类型:%s"%type(img))
  print(img)

运行结果如下图所示:

python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

方法二:使用OpenCV,先读取图片,然后在转换为灰度图:

img = cv2.imread(imgfile)
  #print(img.shape)
  #print(img)
  gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Y = 0.299R + 0.587G + 0.114B
  print("cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)结果如下:")
  print('大小:{}'.format(gray_img.shape))
  print("类型:%s" % type(gray_img))
  print(gray_img)

运行结果如下:

python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

方法三:使用PIL库中的Image模块

img = np.array(Image.open(imgfile).convert('L'), 'f') #读取图片,灰度化,转换为数组,L = 0.299R + 0.587G + 0.114B。'f'为float类型
  print("Image方法的结果如下:")
  print('大小:{}'.format(img.shape))
  print("类型:%s" % type(img))
  print(img)

运行结果如下:

python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

更多关于使用PIL库中的Image模块的convert()函数的知识请参考博客:https://3water.com/kf/201603/492898.html

方法四:TensorFlow方法:

with tf.Session() as sess:
    img = tf.read_file(imgfile) #读取图片,
    img_data = tf.image.decode_jpeg(img, channels=3) #解码
    #img_data = sess.run(tf.image.decode_jpeg(img, channels=3))
    img_data = sess.run(tf.image.rgb_to_grayscale(img_data)) #灰度化
    print('大小:{}'.format(img_data.shape))
    print("类型:%s" % type(img_data))
    print(img_data)

运行结果如下:

python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

可以看出:TensorFlow的方法的结果与上面的三种方法的处理结果略有不同。所以在处理图像的时候最好保持方法的一致性,最好不要用这种方法读取完图片然后用另一种方法处理图片,以避免不必要的bug影响图片处理处理结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python XML RPC服务器端和客户端实例
Nov 22 Python
Python闭包实现计数器的方法
May 05 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python2与Python3的区别实例总结
Apr 17 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
python中dict使用方法详解
Jul 17 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
Python logging设置和logger解析
Aug 28 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
快速解决jupyter启动卡死的问题
Apr 10 Python
Python celery原理及运行流程解析
Jun 13 Python
pybind11和numpy进行交互的方法
Jul 04 #Python
pandas计算最大连续间隔的方法
Jul 04 #Python
python SQLAlchemy 中的Engine详解
Jul 04 #Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 #Python
pybind11在Windows下的使用教程
Jul 04 #Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 #Python
Pycharm简单使用教程(入门小结)
Jul 04 #Python
You might like
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
python实现合并两个数组的方法
2015/05/16 Python
python中enumerate函数用法实例分析
2015/05/20 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
python pandas 时间日期的处理实现
2019/07/30 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Python 自由定制表格的实现示例
2020/03/20 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
百联网上商城:i百联
2017/01/28 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
项目计划书范文
2014/01/09 职场文书
物业工作计划书
2014/01/10 职场文书
护理工作感言
2014/01/16 职场文书
气象学专业个人求职信
2014/04/22 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers