找到给定图片中的板矩形

时间:2013-11-28 23:32:14

标签: java opencv image-processing javacv

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

enter image description here

在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,如下所示:

enter image description here

并通过给出thresholdImg resultImg

来添加此代码
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:

enter image description here

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

2 个答案:

答案 0 :(得分:4)

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

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

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

  3. 使用openCv库的扩张功能稍微扩大检测到的边缘。这很有用,因为一旦牌照的字符被扩大,它们就会填充它们所包含的矩形

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

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

  6. 我向你保证这种方法有效。我自己用它,它检测到车牌照的99.5%用于测试。

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

    希望我有所帮助:)

答案 1 :(得分:2)

Mastering OpenCV with Practical Computer Vision Projects

第5章通过将任务划分为2个主要步骤来解决此问题:细分细分类别

enter image description here

我不想深入了解细节,因为您可以在书上阅读,但the C++ code for this project is freely available可以下载。