Python實現(xiàn)使用卷積提取圖片輪廓功能示例
本文實例講述了Python實現(xiàn)使用卷積提取圖片輪廓功能。分享給大家供大家參考,具體如下:
一、實例描述
將彩色的圖片生成帶邊緣化信息的圖片。
本例中先載入一個圖片,然后使用一個“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中,因為是3個通道,所以sobel卷積核的每個元素都擴成了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()
三、運行結(jié)果
四、說明
可以看出,sobel的卷積操作之后,提取到一張含有輪廓特征的圖像。
再查看一下圖片屬性
注:這里用到了tensorflow
模塊,可使用pip命令安裝:
pip install tensorflow
如果遇到以下紅字錯誤,可以看到提示更新pip到更新的版本(不報錯可直接跳過到下一標(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īng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
調(diào)整Jupyter notebook的啟動目錄操作
這篇文章主要介紹了調(diào)整Jupyter notebook的啟動目錄操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04python可視化數(shù)據(jù)分析pyecharts初步嘗試
這篇文章主要為大家介紹了python可視化數(shù)據(jù)分析pyecharts初步嘗試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04