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

  介绍

小编给大家分享一下使用Python实现使用卷积提取图片轮廓功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

具体如下:

<强>一、实例描述

将彩色的图片生成带边缘化信息的图片。

本例中先载入一个图片,然后使用一个“3通道输入,1通道输出的3 * 3卷积核”(即sobel算子),最后使用卷积函数输出生成的结果。

<强>二、代码

& # 39; & # 39; & # 39; & # 39; & # 39;   载入图片并显示   首先将图片放到代码的同级目录下,通过imread载入,然后将其显示并打印出来   & # 39;& # 39;& # 39;   import  matplotlib.pyplot  as  plt  #, plt 用于显示图片   import  matplotlib.image  as  mpimg  #, mpimg 用于读取图片   import  numpy  as  np   import  tensorflow  as  tf   时间=myimg  mpimg.imread (& # 39; 2. jpg # 39;), #,读取和代码处于同一目录下的图片   # myimg =, mpimg.imread (& # 39; img.jpg& # 39;), #,读取和代码处于同一目录下的图片   plt.imshow (myimg), #,显示图片   plt.axis(& # 39;从# 39;),#,不显示坐标轴   plt.show ()   打印(myimg.shape)   & # 39;& # 39;& # 39;& # 39;& # 39;   上面这段代码输出(960,,720,,3),可以看的到,载入图片的维度是960 * 720大小,3个通道   & # 39;& # 39;& # 39;   & # 39;& # 39;& # 39;& # 39;& # 39;   这里需要手动将sobel算子填入卷积核里。使用tf.constant函数可以将常量直接初始化到变量中,因为是3个通道,所以sobel卷积核的每个元素都扩成了3个。   注意:sobel算子处理过的图片并不保证每个像素都在0 ~ 255之间,所以要做一次归一化操作(即将每个值减去最小的结果,再除以最大值与最小值的差),让生成的值都在[0,1]之间,然后在乘以255   & # 39;& # 39;& # 39;   #全=np.reshape (myimg [1, 3264、2448、3])   完整的=np.reshape (myimg,[3] 1960720年)   # 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,填充为相同表明是同卷积的操作。   op =, tf.nn.conv2d (inputfull,过滤器,,进步=[1,1,1,1),,填充=& # 39;相同# 39;),# 3个通道输入,生成1个feature 马   o=tf.cast (, ((op-tf.reduce_min (op))/(tf.reduce_max (op) -tf.reduce_min (op)),), * 255,, tf.uint8)   with  tf.Session (), as 税:   sess.run才能(tf.global_variables_initializer (),)   ,,t, f=sess.run (o,过滤器,feed_dict={, inputfull:完整})   #才能打印(f)   # t=才能np.reshape (t (3264、2448))   t=才能np.reshape (t) [960720])   plt.imshow才能(t,提出=& # 39;Greys_r& # 39;), #,显示图片   plt.axis才能(& # 39;从# 39;),#,不显示坐标轴   plt.show才能()

<强>三、运行结果

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

<强>四,说明

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

再查看一下图片属性

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

<强>注:这里用到了<代码> tensorflow 模块,可使用pip命令安装:

pip  install  tensorflow

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

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

更新皮普到最新版本:

python  -m  pip  install ——upgrade  pip

以上是“使用Python实现使用卷积提取图片轮廓功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

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