Python实现使用卷积提取图片轮廓功能示例


Posted in Python onMay 12, 2018

本文实例讲述了Python实现使用卷积提取图片轮廓功能。分享给大家供大家参考,具体如下:

一、实例描述

将彩色的图片生成带边缘化信息的图片。

本例中先载入一个图片,然后使用一个“3通道输入,1通道输出的3*3卷积核”(即sobel算子),最后使用卷积函数输出生成的结果。

二、代码

'''''
载入图片并显示
首先将图片放到代码的同级目录下,通过imread载入,然后将其显示并打印出来
'''
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
import tensorflow as tf
myimg = mpimg.imread('2.jpg') # 读取和代码处于同一目录下的图片
#myimg = mpimg.imread('img.jpg') # 读取和代码处于同一目录下的图片
plt.imshow(myimg) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()
print(myimg.shape)
'''''
上面这段代码输出(960, 720, 3),可以看到,载入图片的维度是960*720大小,3个通道
'''
'''''
这里需要手动将sobel算子填入卷积核里。使用tf.constant函数可以将常量直接初始化到Variable中,因为是3个通道,所以sobel卷积核的每个元素都扩成了3个。
注意:sobel算子处理过的图片并不保证每个像素都在0~255之间,所以要做一次归一化操作(即将每个值减去最小的结果,再除以最大值与最小值的差),让生成的值都在[0,1]之间,然后在乘以255
'''
#full=np.reshape(myimg,[1,3264,2448,3])
full=np.reshape(myimg,[1,960,720,3])
#inputfull = tf.Variable(tf.constant(1.0,shape = [1, 3264, 2448, 3]))
inputfull = tf.Variable(tf.constant(1.0,shape = [1, 960, 720, 3]))
filter = tf.Variable(tf.constant([[-1.0,-1.0,-1.0], [0,0,0], [1.0,1.0,1.0],
                  [-2.0,-2.0,-2.0], [0,0,0], [2.0,2.0,2.0],
                  [-1.0,-1.0,-1.0], [0,0,0], [1.0,1.0,1.0]],shape = [3, 3, 3, 1]))
#步长为1*1,padding为SAME表明是同卷积的操作。
op = tf.nn.conv2d(inputfull, filter, strides=[1, 1, 1, 1], padding='SAME') #3个通道输入,生成1个feature ma
o=tf.cast( ((op-tf.reduce_min(op))/(tf.reduce_max(op)-tf.reduce_min(op)) ) *255 ,tf.uint8)
with tf.Session() as sess:
  sess.run(tf.global_variables_initializer() )
  t,f=sess.run([o,filter],feed_dict={ inputfull:full})
  #print(f)
  #t=np.reshape(t,[3264,2448])
  t=np.reshape(t,[960,720])
  plt.imshow(t,cmap='Greys_r') # 显示图片
  plt.axis('off') # 不显示坐标轴
  plt.show()

三、运行结果

Python实现使用卷积提取图片轮廓功能示例

四、说明

可以看出,sobel的卷积操作之后,提取到一张含有轮廓特征的图像。

再查看一下图片属性

Python实现使用卷积提取图片轮廓功能示例

注:这里用到了tensorflow模块,可使用pip命令安装:

pip install tensorflow

如果遇到以下红字错误,可以看到提示更新pip到更新的版本(不报错可直接跳过到下一标题)。

Python实现使用卷积提取图片轮廓功能示例

更新pip到最新版本:

python -m pip install --upgrade pip

PS:截至目前,tensorflow尚不支持python3.6版本,建议使用兼容性较好的Python3.5版本

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python每天必学之bytes字节
Jan 28 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
flask session组件的使用示例
Dec 25 Python
python pyecharts 实现一个文件绘制多张图
May 13 Python
keras K.function获取某层的输出操作
Jun 29 Python
如何使用Python调整图像大小
Sep 26 Python
python 数据类型强制转换的总结
Jan 25 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
在cmd中运行.py文件: python的操作步骤
May 12 #Python
对命令行模式与python交互模式介绍
May 12 #Python
python执行系统命令后获取返回值的几种方式集合
May 12 #Python
在CMD命令行中运行python脚本的方法
May 12 #Python
在cmd命令行里进入和退出Python程序的方法
May 12 #Python
对python中执行DOS命令的3种方法总结
May 12 #Python
python 信息同时输出到控制台与文件的实例讲解
May 11 #Python
You might like
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
低版本中Python除法运算小技巧
2015/04/05 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
法定代表人授权委托书格式
2014/10/14 职场文书
2014年检验科工作总结
2014/11/22 职场文书
通知怎么写?
2019/04/17 职场文书
服务器SVN搭建图文安装过程
2022/06/21 Servers