實施步驟實際上非常簡單,只需要三個步驟:
第壹步:找到文件的邊緣
第二步:通過邊緣找到文檔的輪廓,找到四個角的坐標。
第三步:使用透視轉換功能完成圖像轉換。
以下代碼基於openCV/python的版本:openCV2.4/3+,python2.7/3+。
在上壹章中,我們完成了transform.py模塊的構造,我們將在後續涉及圖像四角處理的問題中用到它。打開python編輯器,創建壹個新文檔並將其命名為scan.py。
接下來是第壹步:邊緣搜索:
測試效果:
殼
雖然背景有點臟,但是文檔的邊緣還是很明顯的。接下來,我們試圖找到文檔的邊緣並生成輪廓。
第二步:找到大綱:
其實在搭建文檔掃描儀的時候,有壹個很重要的前提:掃描儀只在壹張紙上掃描。假設壹張紙是壹個有四條邊的長方形。因此,我們可以創建壹個簡單的方法來幫助我們建立壹個文檔掃描儀。假設圖像中最大的輪廓正好有四個點,這就是我們要掃描的紙張。這也是壹個相當穩妥的假設——當然,文檔的輪廓也可以人為給出。
運行代碼來測試效果:在shell中輸入
如妳所見,我們通過使用邊緣檢測圖像成功地找到了文檔的輪廓,我的收據周圍的綠色矩形顯示了輪廓。最後,讓我們進入步驟3,這將使用four_point_transform函數。
第三步:變換圖像:構建移動文檔掃描儀的最後壹步是取代表文檔輪廓的四個點,應用透視變換,得到壹個自上而下的圖像“鳥瞰圖”。
我們將向four_point_transform傳遞兩個參數:第壹個參數是我們從磁盤加載的原始圖像(不是調整大小的圖像),第二個參數是文檔的輪廓,乘以調整大小的比率。
妳可能會想,為什麽要乘以調整後的比例呢?我們乘以調整後的比例,因為我們進行了邊緣檢測,在調整後的高度=500像素的圖像上找到了輪廓。但是,我們希望掃描原始圖像而不是調整後的圖像,所以我們將輪廓點乘以調整後的比率。
為了獲得圖像的黑白感覺,我們將失真圖像轉換為灰度圖像,並應用自適應閾值。
好了,讓我們運行效果:
殼
好了,到目前為止,掃描圖像到從文檔中提取鳥瞰圖的過程已經完成。遺留問題:
其實這個節目還有很多地方需要妳改進。比如要求轉換後的文檔本身是壹個正四邊形,要在桌面背景上拍攝,對比度明顯。這樣做的目的是為了避免邊緣搜索超過四條邊的情況,超過四條邊的後續輪廓搜索就會出現問題。也就是找不到合適的四邊輪廓來匹配。
解決方法:手動標記四個角來提取輪廓比較可靠。因為在實際應用中,場景往往是不規則的文檔。在下壹節中,我們將討論該方案的實現過程。