Python實(shí)現(xiàn)使用卷積提取圖片輪廓功能示例
本文實(shí)例講述了Python實(shí)現(xiàn)使用卷積提取圖片輪廓功能。分享給大家供大家參考,具體如下:
一、實(shí)例描述
將彩色的圖片生成帶邊緣化信息的圖片。
本例中先載入一個圖片,然后使用一個“3通道輸入,1通道輸出的3*3卷積核”(即sobel算子),最后使用卷積函數(shù)輸出生成的結(jié)果。
二、代碼
'''''
載入圖片并顯示
首先將圖片放到代碼的同級目錄下,通過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') # 不顯示坐標(biāo)軸
plt.show()
print(myimg.shape)
'''''
上面這段代碼輸出(960, 720, 3),可以看到,載入圖片的維度是960*720大小,3個通道
'''
'''''
這里需要手動將sobel算子填入卷積核里。使用tf.constant函數(shù)可以將常量直接初始化到Variable中,因?yàn)槭?個通道,所以sobel卷積核的每個元素都擴(kuò)成了3個。
注意:sobel算子處理過的圖片并不保證每個像素都在0~255之間,所以要做一次歸一化操作(即將每個值減去最小的結(jié)果,再除以最大值與最小值的差),讓生成的值都在[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') # 不顯示坐標(biāo)軸
plt.show()
三、運(yùn)行結(jié)果

四、說明
可以看出,sobel的卷積操作之后,提取到一張含有輪廓特征的圖像。
再查看一下圖片屬性

注:這里用到了tensorflow模塊,可使用pip命令安裝:
pip install tensorflow
如果遇到以下紅字錯誤,可以看到提示更新pip到更新的版本(不報(bào)錯可直接跳過到下一標(biāo)題)。

更新pip到最新版本:
python -m pip install --upgrade pip
PS:截至目前,tensorflow尚不支持python3.6版本,建議使用兼容性較好的Python3.5版本
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python爬蟲實(shí)戰(zhàn)案例之爬取喜馬拉雅音頻數(shù)據(jù)詳解
這篇文章主要介紹了Python爬蟲實(shí)戰(zhàn)案例之取喜馬拉雅音頻數(shù)據(jù)詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例
今天小編就為大家分享一篇django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
在Python中用has_key()方法查找鍵是否存在的教程
這篇文章主要介紹了在Python中用has_key()方法查找鍵是否存在的教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
Python datetime時(shí)間格式化去掉前導(dǎo)0
Python datetime時(shí)間格式化去掉前導(dǎo)0,在format string的%與flag之間,添加一個“-”即可2014-07-07
Python?pycharm讀取文件相對路徑與絕對路徑的方法
這篇文章主要給大家介紹了關(guān)于Python?pycharm讀取文件相對路徑與絕對路徑的方法,絕對路徑就是文件的真正存在的路徑,是指從硬盤的根目錄(盤符)開始,進(jìn)行一級級目錄指向文件,相對路徑就是以當(dāng)前文件為基準(zhǔn)進(jìn)行一級級目錄指向被引用的資源文件,需要的朋友可以參考下2023-12-12

