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

 更新时间:2018年05月12日 15:34:53   作者:chengqiuming  
这篇文章主要介绍了Python实现使用卷积提取图片轮廓功能,涉及Python数值运算与图像处理相关操作技巧,需要的朋友可以参考下

本文实例讲述了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()

三、运行结果

四、说明

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

再查看一下图片属性

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

pip install tensorflow

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

更新pip到最新版本:

python -m pip install --upgrade pip 

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

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

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

相关文章

  • Python爬虫实战案例之爬取喜马拉雅音频数据详解

    Python爬虫实战案例之爬取喜马拉雅音频数据详解

    这篇文章主要介绍了Python爬虫实战案例之取喜马拉雅音频数据详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • django传值给模板, 再用JS接收并进行操作的实例

    django传值给模板, 再用JS接收并进行操作的实例

    今天小编就为大家分享一篇django传值给模板, 再用JS接收并进行操作的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python运行异常管理解决方案

    Python运行异常管理解决方案

    这篇文章主要介绍了Python运行异常管理解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 在Python中用has_key()方法查找键是否存在的教程

    在Python中用has_key()方法查找键是否存在的教程

    这篇文章主要介绍了在Python中用has_key()方法查找键是否存在的教程,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • 教你如何利用Python批量翻译英文Word文档并保留格式

    教你如何利用Python批量翻译英文Word文档并保留格式

    本文将给大家分享一个实用的Python办公自动化脚本 利用Python批量翻译英文Word文档并保留格式,最终效果甚至比部分收费的软件还要好!文中有非常详细的代码示例.需要的朋友可以参考下
    2021-05-05
  • Python datetime时间格式化去掉前导0

    Python datetime时间格式化去掉前导0

    Python datetime时间格式化去掉前导0,在format string的%与flag之间,添加一个“-”即可
    2014-07-07
  • python docx如何修改word表格内容

    python docx如何修改word表格内容

    使用Python-docx库,可以方便地修改Word文档中的表格内容,首先需要安装python-docx库,然后使用该库打开Word文档,遍历文档中的表格并修改指定单元格内容,最后另存为新文档
    2024-09-09
  • Python pycharm读取文件相对路径与绝对路径的方法

    Python pycharm读取文件相对路径与绝对路径的方法

    这篇文章主要给大家介绍了关于Python pycharm读取文件相对路径与绝对路径的方法,绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件,相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件,需要的朋友可以参考下
    2023-12-12
  • PyTorch中的CUDA的操作方法

    PyTorch中的CUDA的操作方法

    这篇文章主要介绍了PyTorch中的CUDA的操作方法,CUDA是NVIDIA推出的异构计算平台,PyTorch中有专门的模块torch.cuda来设置和运行CUDA相关操作,更多相关介绍,需要的朋友可以查看下面文章内容
    2022-08-08
  • 基于KL散度、JS散度以及交叉熵的对比

    基于KL散度、JS散度以及交叉熵的对比

    这篇文章主要介绍了基于KL散度、JS散度以及交叉熵的对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05

最新评论