【问题标题】:houghLines doesn't detect the right lines. How to correct this?houghLines 没有检测到正确的线条。如何纠正这个?
【发布时间】:2013-10-06 02:14:58
【问题描述】:

工作完成

我尝试通过以下步骤检测和读取车牌:

1) 使用 houghlines 检测四边形(此步骤已经出现此问题,抱歉)
2) 将此四边形的透视修正为矩形
3) 在这个矩形上执行 OCR

您可以看到我的代码here 的视觉问题/效果。
代码本身可以在here找到。

免责声明:我为此使用 Emgu CV,但如果有人好心回答我,我不想打扰他或她专门给我这个包装的答案。

public string loadImage()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            String s = ofd.FileName.Normalize();
            return s;
        }

public void processImage()
        {
            String s = loadImage();
            Image<Gray, Byte> img = new Image<Gray, byte>(s);
            Console.WriteLine("read file @" + s);

            Image<Gray, Byte> tinyGrayImg = img.Resize(0.25, INTER.CV_INTER_NN);
            CvInvoke.cvShowImage("original gray", tinyGrayImg);
            Console.WriteLine("converted " + s + " to grayscale");

            Image<Gray, Byte> canny = new Image<Gray, byte>(CvInvoke.cvGetSize(tinyGrayImg));
            CvInvoke.cvCanny(tinyGrayImg, canny, 97, 225, 3);
            CvInvoke.cvShowImage("canny", canny);
            Console.WriteLine("applied Canny to " + s);

            try
            {
                MemStorage mem = new MemStorage();
                Image<Bgr, byte> linesImg = canny.Convert<Bgr, byte>();
                IntPtr lines = CvInvoke.cvHoughLines2(canny, mem.Ptr, HOUGH_TYPE.CV_HOUGH_PROBABILISTIC, 1, Math.PI /   180, 70, 30, 10);
                Seq<LineSegment2D> segments = new Seq<LineSegment2D>(lines, mem);
                LineSegment2D[] segArray = segments.ToArray();

                for (int i = 0; i < segArray.Length; i++)
                {
                    linesImg.Draw(segArray[i], new Bgr(Color.Red), 1);
                }
                CvInvoke.cvShowImage("lines", linesImg);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

问题

正如您在附加图像中看到的(我没有足够的业力直接添加图像),HOUGH_PROBABILISTIC 过滤器无法按预期工作,我不知道为什么无法识别车牌的边缘。欢迎任何想法如何达到我的目标。

【问题讨论】:

  • 您可以从这里尝试线段检测器代码:runmycode.org/CompanionSite/site.do?siteId=132 作为霍夫变换的替代方案。
  • 老实说:C 超出了我的想象
  • 请提供您问题中的代码,因为将来可能会丢失外部链接。

标签: opencv ocr emgucv hough-transform


【解决方案1】:

霍夫变换并不完美。它会按照非常简单的算法检测线条,我可以向您保证,您得到的结果非常好。

现在,您需要过滤结果。例如,如果您知道这条线将始终处于某些角度,请删除其余部分。如果您知道它们会有些长,请移除所有较小的部分。

如果还不够,可能是你一开始做的精明变换还不够。也许你需要一个基于颜色(白板)的感兴趣区域(ROI)。或者,也许您可​​以使用斑点检测来查找白色物体。所有你知道的常数都应该用在计算机视觉中。使用像霍夫变换这样的单一算法会有所帮助,但它不会自动找到所有东西,你需要帮助它!

希望对你有帮助!

【讨论】:

  • 我的问题是车牌周围并没有真正的线条。只是顶部和底部的一块,但没有相交的线形成一个“矩形”(四边形或平行四边形更好,因为它是透视图),我可以将其用作过滤器。
  • Hough 变换用于检测粗线和长线。它尽其所能,尽其所能。这就是为什么我建议更好的想法,比如颜色和斑点检测。在现实生活中(真实图片),希望通过霍夫变换找到一个漂亮的矩形几乎是不可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多