臥槽!逆天了,Python竟然能打造一款掃描全能王,實現圖片糾正


小夥伴們在日常的工作學習中,或多或少的都會遇到,將書籍或者是資料文件,用手機進行拍攝,方便文檔的保存,但是由於拍攝的角度或者是拍攝手法的原因,拍攝出來的照片往往會出現偏差,閱讀起來也不方便。

今天,小編就爲大家制作了一款簡易的掃描器,幫助大家將拍攝的圖片進行糾正,並將糾正的圖片進行保存,一起來看看吧。

01.程序講解

接下來,我們通過程序的一點點解析,讓大家更好的對軟件有更好的認識。對於程序部分的講解,我們可以拆解爲兩個部分:

  • 圖片的糾正
  • 軟件界面的構建

02.圖片的糾正

對於圖片的糾正,可以歸結爲邊緣檢測——>角點檢測——>透視變換的過程,邊緣檢測的作用是檢測圖片中的圖像的邊緣,程序如下圖所示。

03.邊緣檢測

程序通過opencv中的Canny函數來檢測物體的邊界,這裏需要注意的是,有兩個閾值數值需要調節:

  • 程序中分別用threshold_bar1和threshold_bar2兩個滑動條來控制,threshold_bar2用來檢測較爲明顯的邊界;
  • 而threshold_bar1則是負責將threshold_bar2檢測出來的邊界進行連接,組成一個完整的物體邊界信息;

通過dilate和erode函數來將邊緣進行填充後,通過findContours函數,來得到物體的輪廓的位置座標信息,程序中contours變量保存的是位置座標數值。對於邊緣檢測後填充的效果,效果如下圖所示:


04.角點檢測

對於角點的檢測,也就是對於輪廓中“角”的檢測,程序如下圖所示。

程序通過對於輪廓數值中每一組數值的面積計算,如果面積大於5000,就利用approxPolyDP函數對輪廓進行多邊形的擬合操作;如果擬合出來的圖形是四邊形的話,則說明該組輪廓數據下,檢測到了類似於書本、紙張等矩形的目標,那麼就返回approxPolyDP函數所擬合的四個角點座標的數值。如下圖所示。


05.透視變換

在得到擬合的角點數據之後,接下來就是要進行透視變換的操作,所謂的透視變換,可以理解爲將偏斜角度拍攝的目標,轉變爲正視圖。程序如下圖所示:

程序將擬合得到的四個角點座標,通過透視變換轉變爲480x640大小的正視圖,程序中通過getPerspectiveTransform函數生成透視變換的變換矩陣,利用warpPerspective函數來完成對於原圖的透視變換,其結果如下圖所示:


06.軟件界面的構建

軟件界面的構建,利用的是PyQt5進行製作,其界面如下所示:

軟件界面中,位於界面中央顯示的是圖像的展示區域,分別是原圖展示,提取到的矩形目標以及最終的透視變換的結果圖。

  • 界面中黃色的模塊表示的是按鈕控件,其中,“文件”按鈕,表示選取本地的原始圖片,“開始”按鈕表示的是執行圖片的投視變換,

  • 保存按鈕則是將最終的透視變換結果進行保存。

  • “退出”按鈕則是代表退出整個軟件。

這裏我們以“開始”按鈕爲例,解析一下其控制的函數。

“開始“按鈕綁定openImg函數,當點擊按鈕時,程序通過getOpenFileName函數來選取本地的文件,獲取得到本地文件的路徑,並將本地的圖片展示在界面當中。

07.總結

以上就是小編爲大家分享的圖片掃描器的內容,大家可以下載軟件進行測試,需要注意的是,在圖片拍攝的過程中,爲了保證掃描器結果準確性,大家儘量保證拍攝圖片的背景爲單一的顏色,如上圖中,原始圖片中,書本的背景爲單一的黑色,這樣,最大程度的保證了結果的準確性。覺得本篇不錯的小夥伴,記得在留言區給個三連哦!

【菜鳥學Python】累計原創近400篇趣味乾貨(爬蟲,數據分析,算法,面試指南,原創趣味實戰,Python遊戲,機器學習),歡迎一起學Python,交流指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章