朱榮剛 翟震 王晨曦 高江巖


摘 ?要:文章首先介紹了圖片分層的應用領域,接著闡述了利用Python語言對圖片進行分層的具體設計過程,包括編程語言的選擇、二值化的設計思路,即先對圖像進行灰度化,再進行閥值化處理,對圖像特征按照灰度級進行提取,進而實現分層的操作及分層后的文件處理,最后給出了部分程序和運行結果。
關鍵詞:Python;圖片分層;軟件;雕刻
中圖分類號:TP312 文獻標志碼:A ? ? ? ? 文章編號:2095-2945(2020)02-0035-03
Abstract: This paper first introduces the application field of picture layering, and then expounds the specific design process of picture layering by using Python language, including the selection of programming language and the design idea of binarization, that is, graying the image first. Then it carries on the threshold processing, extracts the image features according to the grayscale, and then realizes the layered operation and file processing after layering. Finally, some programs and running results are given.
Keywords: Python; image layering; software; engraving
前言
隨著生活水平的提高,人們對手工藝品的需求日益增多,其中以木雕、烙畫等居多。傳統的生產模式是純手工制作,不僅耗時耗力,而且次品率很高。目前,各類激光雕刻設備日趨增多,技術較為成熟,但基本上是雕刻平面圖形。對于富有質感的雕刻畫,需要對圖片進行分層處理,確定每層的雕刻參數。如果利用PS等軟件進行處理,過程復雜,速度慢,精度也差,因此需要編寫專門的軟件,該軟件可以實現對JPG、PNG圖片的快速分層。
1 方案設計
1.1 編程語言選擇
Python是一種面向對象型腳本語言,Python具有語法簡潔而高效、一次編譯處處能運行、擁有包羅幾乎所有常見功能的庫、適合快速開發等特點,已經成為最流行的腳本語言之一[1]。
因為Python語言語法簡潔、清晰,具有豐富強大的庫[1],所以使用Python語言開發該圖像分層軟件最合適。通過Python語言可以設計出便于操作、實用性強的圖片分層軟件,該軟件在后臺對分層模式的參數設定,可以實現對圖片的快速分層。軟件以雕刻立體感圖片為主要目的,編寫出以Python腳本語言為依托的圖片分層軟件,該圖片分層軟件可以通過對模式的選擇將輸入的圖片進行分層處理,之后將分層后的圖片傳送給雕刻機,雕刻機在木板等具有一定厚度的材料上雕刻出具有層次感的圖畫,如景區圖片和人物肖像等,最終制作出高檔的禮品或紀念品。
1.2 設計思路
軟件采用二值化技術對圖像進行分層處理。首先對圖像進行灰度化,再進行閥值化處理,對圖像特征按照灰度級進行提取,閥值化可以根據灰度圖片本身設置閥值,也可以根據graythresh函數自動設置閥值[2]。為了減少工作人員的工作量、提高圖片分層的效率、使軟件具有較強的實用性、滿足實際工作中對分層圖片的特殊要求,可以根據圖片的實際分層效果選擇合適的分層模式,而且能根據客戶要求隨時對參數進行修改。分層處理后得到的分層圖片格式、大小一致,可以在軟件主界面觀察分層圖片并和原圖進行對比,滿足客戶特定的打印需求[3]。該軟件對于工藝品制造業、旅游景點的紀念品加工行業具有重大意義,將會帶來巨大的經濟效益。
系統主界面包含兩大模塊。第一個模塊是圖片處理程序,該模塊可以將輸入進來的圖片進行二值化、閥值化處理,隨后將分層后的圖像自動保存到指定文件夾,之后可以將這些圖片輸送給雕刻機,指導雕刻機雕刻出具有立體感的工藝品[4]。第二個模塊是圖片預覽程序,處理后的圖片將會被保存到同一個指定文件夾下[5],該模塊就是將指定文件夾內的圖片導出顯示在系統主界面的圖片預覽區域,并且按照圖片生成時間排序,可以上下翻動預覽圖片[6]。
該系統主要適合對肖像圖以及風景圖片進行處理,打印出來的圖片可以作為一種高檔的禮物或者旅游紀念品,具有很高的經濟前景。
2 軟件設計
2.1 功能需求
要求輸入圖片文件的格式為:jpg、bmp、png,最大1080*1920(像素),經過分層后輸出同樣格式的文件3-7個(視精度情況選擇)。同時要求對于輸入的圖片在后臺的處理時間不超過2秒。
2.2 主界面設計
如圖1所示,軟件提供了三種分層模式可供選擇。首先調入原始圖片,點擊相應的分層模式按鈕后,就可以選擇要處理的圖片,選中的圖片將會被擴大/縮小到指定大小,在原圖位置處顯示,方便與處理后的圖片進行對比[7]。
軟件主界面的右側是圖片預覽區,圖片預覽程序將會把分層后的圖片保存到默認的文件夾,文件夾里的圖片按照生成時間先后進行排序,在主界面的圖片預覽區域顯示,每次只顯示一張圖片。圖片翻頁時需要點擊圖片預覽區域右側的“上一張”、“下一張”按鈕,當圖片翻到最后一頁時繼續翻頁將會有系統提示[8]。
2.3 程序設計
本軟件使用了兩個庫進行設計:Tkinter庫主要支持了該軟件編寫過程中所涉及到的核心窗口部件;cv2庫主要引用于該軟件在圖片處理程序部分[9]。
因限于篇幅僅列出閥值程序。
def q0():#全局閾值
def threshold_demo(image):
gray=cv.cvtColor(image,cv.COLOR_RGB2GRAY) #把輸入圖像灰度化
#直接閾值化是對輸入的單通道矩陣逐像素進行閾值分割。
ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_TRIANGLE)
print(“threshold value %s”%ret)
cv.namedWindow(“binary0”, cv.WINDOW_NORMAL)
cv.imwrite('D:\w00.png', binary)
cv.imshow(“D:\w00.png”, binary)
cv.destroyAllWindows() #局部閾值
def local_threshold(image):
gray=cv.cvtColor(image,cv.COLOR_RGB2GRAY)#把輸入圖像灰度化
#自適應閾值化能夠根據圖像不同區域亮度分布,改變閾值
binary=cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_T
HRESH_GAUSSIAN_C,cv.THRESH_BINARY,25,10)
cv.namedWindow("binary1",cv.WINDOW_NORMAL)
cv.imwrite('D:\w01.png',binary)
cv.imshow("D:\w01.png",binary)
cv.destroyAllWindows()
def custom_threshold(image):#用戶自己計算閾值
gray=cv.cvtColor(image,cv.COLOR_RGB2GRAY)#把輸入圖像灰度化
h,w=gray.shape[:2]
m=np.reshape(gray,[1,w*h])
mean=m.sum()/(w*h)
print("mean:",mean)
ret,binary=cv.threshold(gray,mean,255,cv.THRESH_B
INARY)
cv.namedWindow("binary2",cv.WINDOW_NORMAL)
cv.imwrite('D:\w02.png',binary)
cv.imshow("D:\w02.png",binary)
cv.destroyAllWindows()
src=cv.imread(filename)
cv.namedWindow('input_image',cv.WINDOW_NORMAL)
#設置為WINDOW_NORMAL可以任意縮放
cv.imshow('input_image',src)
threshold_demo(src)
local_threshold(src)
custom_threshold(src)
cv.waitKey(0)
cv.destroyAllWindows()
2.4 運行結果
該軟件提供了三種分層模式,分別是粗略模式、普通模式和精細模式。圖2列出了粗略模式的運行結果,該模式將所選圖片進行3層細分,處理后將得到尺寸相同的三個圖片文件[3]。
3 結束語
該軟件實現了預期功能,能夠一鍵對輸入的圖片進行分層處理,并且提供了三種分層模式供用戶選擇,實用性強,滿足了用戶的實際需求。不足之處在于需要安裝Python系統及第三方庫,圖片處理的精度仍有提高的余地。
參考文獻:
[1]王常衡,李嘉偉,羅欽,等.淺析Python語言及其應用前景[J].計算機產品與流通,2019(04):146.
[2](美)Watts S. Humphrey.軟件工程規范[M].清華大學出版社,2004.
[3]李俊.python趣味圖像處理[J].電子制作,2013(17):71.
[4]楊佩璐,宋強.Python寶典[M].電子工業出版社,2014.
[5]呂云翔,趙天云,張元.Python大學教程[M].電子工業出版社,2017.
[6]江開耀,張俊蘭,李曄.軟件工程[M].西安:電子科技大學出版社,2003.
[7]陳之堯.基于OpenCV-Python的圖像分割技術的設計與應用研究[J].中國新通信,2018,20(19):89.
[8]戴維I.施奈德,車萬翔.Python程序設計[M].機械工業出版社,2016.
[9]湯韜.Python庫簡介[J].程序員,2006(6):62-63.