OpenCV文本圖像的旋轉矯正


用戶在使用Android手機拍攝過程中難免會出現文本圖像存在旋轉角度。這里采用霍夫變換、邊緣檢測等數字圖像處理算法檢測圖像的旋轉角度,並根據計算結果對輸入圖像進行旋轉矯正。

首先定義一個結構元素,再通過該結構元素對該圖像進行開運算和閉運算(即腐蝕膨脹運算)。

Imgproc.cvtColor(matOri, matGray, Imgproc.COLOR_RGB2GRAY);
Mat kernel = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT, new Size(20,20)); 
Imgproc.morphologyEx(matGray, matGray, Imgproc.MORPH_OPEN, kernel);        
Imgproc.morphologyEx(matGray, matGray, Imgproc.MORPH_CLOSE, kernel);

 

然后調用Imgproc.threshold方法把原灰度圖轉換為二值圖。

Imgproc.threshold(matGray, matGray, 80, 255, Imgproc.THRESH_BINARY);

 

接着通過Canny邊緣檢測算子來檢測邊界。參數為edges輸出的邊緣圖像,threshold1和threshold2 當中的小閾值用來控制邊緣連接。
利用霍夫變換在二值圖中尋找直線,然后遍歷所有的直線調用Math.atan來計算直線的角度。過濾掉一些角度過於大的直線和非法角度得到該圖像該旋轉的角度,再旋轉該矩陣即可。

Mat edges = new Mat();
Imgproc.Canny(matGray, edges, 20, 160);
Mat lines = new Mat();//檢測到的直線集合
Imgproc.HoughLinesP(edges, lines, 1, Math.PI/180, 45, 20, 20);

 

最后采用重投影技術矯正圖像旋轉:調用OpenCV函數Imgproc.getRotationMatrix2D()構建旋轉矩陣,調用函數Imgproc.warpAffine()構建旋轉后的圖像。

旋轉的角度如下圖:

采用重投影技術矯正圖像旋轉如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM