java - 在给定的图片中找到板矩形

标签 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

并通过将 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:

enter image description here

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

最佳答案

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

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

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

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

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

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

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

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

希望我有帮助:)

关于java - 在给定的图片中找到板矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276209/

相关文章:

image-processing - OpenCV 在同一窗口中相邻显示 2 个图像

java - 在java中组合两个图像?

java - Android:检查互联网连接会挂起 UI

java - Gson.fromJson(String, Type) 反序列化时去除json字符串中的空格

java - Oozie 作业失败 Mapr 6.x

c# - 图像扭曲和收缩效果,图像失真算法

Java 线程在同步块(synchronized block)上加锁

c++ - 同时从多个流中捕获,最好的方法以及如何减少 CPU 使用率

c++ - imread 命令后 OpenCV 矩阵内存释放

python - 开放式 CV 轮廓面积计算错误