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检测手机QQ在线状态的脚本代码
Feb 10 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
浅谈Python的垃圾回收机制
Dec 17 Python
Python列表切片用法示例
Apr 19 Python
Python入门_浅谈for循环、while循环
May 16 Python
获取Django项目的全部url方法详解
Oct 26 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
django使用graphql的实例
Sep 02 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Python - 10行代码集2000张美女图
May 23 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常用代码
2006/11/23 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
Js基础学习资料
2010/11/23 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
python关闭占用端口方式
2019/12/17 Python
python实现人机五子棋
2020/03/25 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
班长岗位职责
2013/11/10 职场文书
2014年安全员工作总结
2014/11/13 职场文书
结婚老公保证书
2015/02/26 职场文书
学校国庆节活动总结
2015/03/23 职场文书
python如何进行基准测试
2021/04/26 Python