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中的自定义函数学习笔记
Sep 23 Python
Python正则表达式匹配ip地址实例
Oct 09 Python
Python性能优化技巧
Mar 09 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
Python的缺点和劣势分析
Nov 19 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
django 连接数据库出现1045错误的解决方式
May 14 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模板引擎SMARTY
2006/10/09 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
Javascript 继承机制实例
2009/08/12 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python lambda和Python def区别分析
2014/11/30 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
介绍Python中几个常用的类方法
2015/04/08 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
英国袜子店:Sock Shop
2017/01/11 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
python turtle绘图
2022/05/04 Python