昨年寫的OpenCV處理表格的東西搞丟了,這幾天想起來需要繼續做完,翻遍了硬盤還是沒找到代碼,今天呆在電腦前,還是覺得應該有始有終,再做一個吧,我不知道這次我能堅持多久。2020年4月29日 00:00:49
目的:使用OpenCV獲取到表格主體輪廓,並用紅線畫出輪廓。
爲了方便後續桌面開發,暫時用C#作爲編程語言。
//通過圖片框拿到Mat
Bitmap bi = new Bitmap(pictureBox1.Image);
Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bi);
//另外再複製一個,用於繪畫
Mat mat2 = mat.Clone();
後續不同操作的例子:
開運算
//開運算
Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect,new OpenCvSharp.Size(80,80));
Cv2.MorphologyEx(mat,mat2, MorphTypes.Open, kernel);
pictureBox1.Image = mat2.ToBitmap();
邊緣檢測
//進行邊緣檢測
Cv2.Canny(mat, mat2, 194, 105,3);
pictureBox1.Image = mat2.ToBitmap();
經過了邊緣檢測後的霍夫變換取直線
//進行邊緣檢測
Cv2.Canny(mat, mat2, 194, 105,3);
//創建一個純黑背景的Mat
Mat black = new Mat();
black.Create(mat.Height, mat.Width, MatType.CV_8UC3);
//霍夫變換取直線
var p = Cv2.HoughLinesP(mat2, 1,Math.PI/180,100,50,100);
foreach (var item in p) {
Cv2.Line(black, item.P1, item.P2,Scalar.Red);
}
pictureBox1.Image = black.ToBitmap();
到這裏感覺有那個意思了,但是雜線還是太多了,遠沒達到理想效果,還需要繼續處理,分析這些比較集中的豎線,看得出是因爲表格上的內容比較多,所以要做形態學腐蝕操作,具體還需研究,今天更在這裏。2020年4月29日 00:23:49