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实现2048小游戏
Mar 30 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
python字典的常用操作方法小结
May 16 Python
Python玩转Excel的读写改实例
Feb 22 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
基于python爬取梨视频实现过程解析
Nov 09 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
索尼ICF-SW100收音机评测
2021/03/02 无线电
PHP json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
如何让CI框架支持service层
2014/10/29 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
JQuery小知识
2010/10/15 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python递归函数绘制分形树的方法
2018/06/22 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
python将字母转化为数字实例方法
2019/10/04 Python
详解Python 中的容器 collections
2020/08/17 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
《大禹治水》教学反思
2014/04/27 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL