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线程池的实现实例
Nov 18 Python
Python中random模块用法实例分析
May 19 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python 基础之字符串string详解及实例
Apr 01 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Python中psutil的介绍与用法
May 02 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
Python笔试面试题小结
Sep 07 Python
使用keras根据层名称来初始化网络
May 21 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 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
ASP知识讲座四
2006/10/09 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
js的with语句使用方法
2007/09/21 Javascript
js+css在交互上的应用
2010/07/18 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
Javascript函数的参数
2015/07/16 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python中get和post有什么区别
2020/06/19 Python
python中如何写类
2020/06/29 Python
详解Anaconda 的安装教程
2020/09/23 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
CAD制图人员的自荐信
2014/02/07 职场文书
法学自荐信
2014/06/20 职场文书
房地产项目合作意向书
2015/05/08 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
Golang实现可重入锁的示例代码
2022/05/25 Golang