【开发日记】OpenCV表格应用-持续更新

昨年写的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

 

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