我想使用emgucv来检测图像的方向,如Id卡或Pan卡,这样我就可以纠正图像,并将相同的图像传递给tesseract OCR。我在谷歌上搜索了一下,没能找到C#的例子。
有谁能指导我或建议一些例子吗?任何帮助将是非常感激的。
imgInput = new Image<Bgr, byte>(impath);
Image<Gray, Byte> imggray = imgInput.Convert<Gray, Byte>();
VectorOfVectorOfPoint contour = new VectorOfVectorOfPoint();
Emgu.CV.Mat hiers = new Emgu.CV.Mat();
CvInvoke.FindContours(imggray, contour, hiers, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
Bitmap imgsss;
if (contour.Size >= 1)
{
for (int i = 0; i <= 1; i++)
{
Rectangle rect = CvInvoke.BoundingRectangle(contour[i]);
Emgu.CV.Structure.RotatedRect box = CvInvoke.MinAreaRect(contour[i]);
imggray.ROI = rect;
imggray = imggray.Rotate(box.Angle, new Gray(255));
imggray.Save(impath);
imgsss = imggray.Copy().Bitmap;
break;
}
}
不幸的是,我一直在努力寻找Emgucv的文档。很多时候,我会看一些2013年的晦涩的博客文章,不得不修改代码,以正确地与Emgucv的最新版本一起工作。为了弥补这一点,我经常会看opencv的c++代码,只需要修改部分代码就可以和c#一起使用。我发现这样做的效果比较好,因为从opencv c++到emgucv c#的语法相对来说是一样的,与opencv python到emgucv c#的语法是一样的。要回答你关于检测身份证和纠正方向的问题,可以看看这里的链接。
https:/www.learnopencv.comimage-alignment-feature-based-using-opencv-c-python
基本的想法是你创建一个特征检测器来检测图像的相关片段,然后使用匹配器和翘曲透视来固定方向。就像前面说的,代码是用c++写的,但我应该很容易转换,大部分函数都包含在命名空间的 CvInvoke
.