【问题标题】:Find the plate rectangle in a given picture在给定图片中找到板矩形
【发布时间】:2013-12-15 02:04:34
【问题描述】:

这是我的原始图片,我想找到车牌,以便在这个矩形中搜索车牌,而不是在整个图片中搜索
原图test_1.jpg:

在 javacv 中使用以下代码:

IplImage originalImage = cvLoadImage("test_1.jpg");
IplImage resultImage = IplImage.create(originalImage.width(),
                originalImage.height(), IPL_DEPTH_8U, 1);
cvCvtColor(originalImage, resultImage, CV_BGR2GRAY);
cvAdaptiveThreshold(resultImage, resultImage, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV, 7, 7);
cvSaveImage("test_2.jpg", resultImage);

生成的图片是 test_2.jpg 看起来像这样:

并通过将 resultImg 赋予 thresholdImg 添加此代码

static void findLines(IplImage thresholdImg)
{
    IplImage dst;
    IplImage colorDst;
    dst = cvCreateImage(cvGetSize(thresholdImg), thresholdImg.depth(), 1);
    colorDst = cvCreateImage(cvGetSize(thresholdImg), thresholdImg.depth(), 3);    
    cvCanny(thresholdImg, dst, 100, 200, 3);
    CvSeq lines = new CvSeq();
    CvMemStorage storage = cvCreateMemStorage(100000); 
    cvSaveImage("test_3.jpg", dst);
}

结果图片 test_3.jpg :

是否有任何我生成的图片可用于继续我的代码,以便在图像中找到包含盘子的矩形

【问题讨论】:

    标签: java opencv image-processing javacv


    【解决方案1】:

    你正朝着正确的方向前进。

    1. 您需要在对图像进行阈值处理之前执行某种平滑/模糊处理,以消除不需要的噪声

    2. 像现在这样对图像应用阈值

    3. 使用 openCv 库的 dilate 函数稍微扩大检测到的边缘。这很有用,因为一旦车牌的字符被放大,它们就会填充它们所在的矩形

    4. openCV 有一个名为 cvRectangle 的函数,用于搜索图像中的矩形形状。网上有很多文档可以帮助你使用它

    5. 最后,您需要根据比率(宽度/高度)和面积(宽度 * 高度)过滤找到的候选车牌矩形。例如,至少在我的测试图像中,葡萄牙车牌的比率在 2 到 3.5 之间,面积约为 5000-7000 像素。显然这取决于车牌的形状、图像大小等。

    我向您保证,这种方法有效。我自己使用过它,它可以检测到我用于测试的 99.5% 的车辆照片中的车牌区域。

    如果您的图片太亮,您可能想要做的一件事是在阈值之前使用 Sobel 过滤器(也可在 opencv 库中使用)。这意味着仅在第 2 步中进行更改,其他保持不变。

    希望对我有所帮助:)

    【讨论】:

    • cvRectangle 方法不是用于搜索矩形,而是用于绘制它们。我错过了什么吗?
    • OpenCV 可以根据一些数学公式找到几何形状和图案,如上所述,通过简单的矩形面积计算。
    • OpenCV 中是否有任何函数可以在矩形中找到矩形形状?您提到了 cvRectangle 但该函数用于绘制矩形而不是用于查找它们来源:doc)
    • 我这样做已经快 2 年了,但据我所知,你确实是对的:cvRectangle 绘制矩形,然后通过应用你想要的算法(面积比等)过滤它们。最后,您应该只有满足要求的矩形
    【解决方案2】:
    Mastering OpenCV with Practical Computer Vision Projects

    第 5 章通过将任务分为 2 个主要步骤来处理这个确切的问题:segmentationsegment classification

    我不想深入细节,因为你可以在书上看到它,但the C++ code for this project is freely available可供下载。

    【讨论】:

    • 我读了这本书,也读了代码,但是我在将 c++ 代码转换为 javacv 时遇到问题,其中 c++ 中的某些函数在 javacv 中找不到,或者这些函数的替代方法不一样添加了一些参数并更改了某些类型的参数,我对此感到困惑,我正在寻找一个简短的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多