基於python+opencv的圖像目標區域自動提取


向AI轉型的程序員都關注了這個號👇👇👇python

機器學習AI算法工程   公衆號:datayx程序員



1、提取紙張中的內容


一張照片中的感興趣區域老是沿着x,y,z三個軸都有必定傾斜(以下圖),要想把照片翻轉到平行位置,須要進行透視變換,而透視變換須要同一像素點變換先後的座標。由此能夠想到,提取矩形區域四個角的座標做爲變換前的座標,變換後的座標能夠設爲照片的四個角落,通過投影變換,矩形區域將會翻轉並充滿圖像。web

所以咱們要解決的問題變爲:提取矩形的四個角落、進行透視變換。面試



提取矩形角落座標算法

矩形的檢測主要是提取邊緣,圖片顯示部分的亮度一般高於周圍環境,咱們能夠將圖片閾值化,將圖片部分與周圍環境明顯的分別開來,這對後邊的邊緣檢測很是有幫助。flask

檢測矩形並提取座標須要對圖像進行預處理、邊緣檢測、提取輪廓、檢測凸包、角點檢測。數組


一、預處理轉爲灰度圖微信

因爲手機拍攝的照片像素可能會很高,爲了加快處理速度,咱們首先將圖像轉化爲灰度圖網絡


image = cv2.imread(Config.src)app

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

srcWidth, srcHeight, channels = image.shape

print(srcWidth, srcHeight)



二、中值濾波

binary = cv2.medianBlur(gray,7)


三、轉化爲二值圖像

ret, binary = cv2.threshold(binary, Config.threshold_thresh, 255, cv2.THRESH_BINARY)

cv2.imwrite("1-threshold.png", binary, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])


此時圖片已經變成了這個樣子:



可見紙張頁面部分已經與背景環境分離開來。

四、邊緣檢測與輪廓處理

咱們用Canny算子邊緣檢測,提取輪廓

# canny提取輪廓
binary = cv2.Canny( binary , 0 , 60 , apertureSize = 3 ) cv2.imwrite( "3-canny.png" , binary , [int(cv2.IMWRITE_PNG_COMPRESSION), 9 ])





五、提取面積最大的輪廓並用多邊形將輪廓包圍



模板識別:使用OpenCV實現基於特徵的圖像對齊


中文簡歷表格提取,手寫漢字識別(Python+OpenCV)


票據圖片複雜表格框識別(票據單元格切割)



2、使用Python和OpenCV檢測和標記湖面輪廓


咱們將使用OpenCV探測地圖中湖面的輪廓,並標記面積最大的湖面。




經過OpenCV提供的cv2.imread能夠讀入原始圖片,讀入的圖片被表示成一個三維數組的結構,能夠經過數組下標訪問每個點的顏色信息。


圖片中面區域的RGB顏色爲[170,218,255],咱們只須要在圖片上檢查具備這種顏色的區域,這裏咱們容許正負10的誤差。另外注意,在OpenCV顏色表示的順序稍有不一樣,OpenCV採用的BGR順序。

OpenCV提供了cv2.inRange函數,這個函數對圖片進行二值化處理,將不在閥值範圍內的點變換爲黑色點[0,0,0],處於範圍內的點變換爲白色點[255,255,255]。



上面的代碼中,cv2.inRange函數處理後圖片後,調用cv2.imshow顯示處理後的二值化圖片:



OpenCV提供了cv2.findContours()函數提取二值化圖像的輪廓。對上面生成圖片上執行這個函數就能夠返回該圖片的區域輪廓。因爲執行該函數時會直接修改圖像,所以咱們複製一份圖像之傳給cv2.findContours();同時,OpenCV提供了cv2.drawContour()函數繪能夠把輪廓疊加到另外一張圖片上。

下面的代碼使用cv2.findContours()函數對mask圖片提取輪廓,並調用cv2.drawContour()把輪廓疊加在原始圖像。



咱們能夠看見全部湖面被標記,以下圖:



如今咱們對返回的輪廓就進行排序,第一個輪廓就是面積最大的。







閱讀過本文的人還看了如下文章:


【全套視頻課】最全的目標檢測算法系列講解,通俗易懂!


《美團機器學習實踐》_美團算法團隊.pdf


《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼


python就業班學習視頻,從入門到實戰項目


2019最新《PyTorch天然語言處理》英、中文版PDF+源碼


《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼


《深度學習之pytorch》pdf+附書源碼


PyTorch深度學習快速實戰入門《pytorch-handbook》


【下載】豆瓣評分8.1,《機器學習實戰:基於Scikit-Learn和TensorFlow》


《Python數據分析與挖掘實戰》PDF+完整源碼


汽車行業完整知識圖譜項目實戰視頻(全23課)


李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019春)教材


筆記、代碼清晰易懂!李航《統計學習方法》最新資源全套!


《神經網絡與深度學習》最新2018版中英PDF+源碼


將機器學習模型部署爲REST API


FashionAI服裝屬性標籤圖像識別Top1-5方案分享


重要開源!CNN-RNN-CTC 實現手寫漢字識別


yolo3 檢測出圖像中的不規則漢字


一樣是機器學習算法工程師,你的面試爲何過不了?


前海徵信大數據算法:風險機率預測


【Keras】完整實現‘交通標誌’分類、‘票據’分類兩個項目,讓你掌握深度學習圖像分類


VGG16遷移學習,實現醫學圖像識別分類工程項目


特徵工程(一)


特徵工程(二) :文本數據的展開、過濾和分塊


特徵工程(三):特徵縮放,從詞袋到 TF-IDF


特徵工程(四): 類別特徵


特徵工程(五): PCA 降維


特徵工程(六): 非線性特徵提取和模型堆疊


特徵工程(七):圖像特徵提取和深度學習


如何利用全新的決策樹集成級聯結構gcForest作特徵工程並打分?


Machine Learning Yearning 中文翻譯稿


螞蟻金服2018秋招-算法工程師(共四面)經過


全球AI挑戰-場景分類的比賽源碼(多模型融合)


斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


python+flask搭建CNN在線識別手寫中文網站


中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程



不斷更新資源

深度學習、機器學習、數據分析、python

 搜索公衆號添加: datayx  

長按圖片,識別二維碼,點關注


本文分享自微信公衆號 - 機器學習AI算法工程(datayx)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索