JavaCV警告标志检测?

标签 java image-processing opencv javacv

我查看了 OpenCV 库的 JavaCV 包装器,发现可以在 Java 中使用该库对图像进行人脸检测,但我想知道是否可以使用该库检测 traffic warning signs在图像上以及如何?

我在路上拍的照片是这样的:http://www.4shared.com/photo/5QxoVDwd/041.html 并且检测结果应该看起来像这样或类似:http://www.4shared.com/photo/z_pL0lSK/overlay-0.html

编辑: 在我检测到红色后,我得到了这张图片:

enter image description here

而且我在检测警告标志三角形时遇到了问题,而忽略了所有其他形状。我尝试更改 cvApproxPoly 参数但没有结果。这是我的代码:

public void myFindContour(IplImage image)
{
    IplImage grayImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    cvCvtColor(image, grayImage, CV_BGR2GRAY);

    CvMemStorage mem;
    CvSeq contours = new CvSeq();
    CvSeq ptr = new CvSeq();
    cvThreshold(grayImage, grayImage, 150, 255, CV_THRESH_BINARY);
    mem = cvCreateMemStorage(0);

    cvFindContours(grayImage, mem, contours, Loader.sizeof(CvContour.class) , CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
    Random rand = new Random();

    while (contours != null && !contours.isNull()) {
        if (contours.elem_size() > 0) {
            CvSeq points = cvApproxPoly(contours, Loader.sizeof(CvContour.class),
                    mem, CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0);
            Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
            CvScalar color = CV_RGB( randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
            cvDrawContours(image, points, color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));
        }
        contours = contours.h_next();
    }

    cvSaveImage("myfindcontour.png", image);

}

这是我得到的输出(我为每个形状使用了不同的颜色,但在最终输出中我将只使用白色来检测警告标志,其他所有颜色都为黑色):

enter image description here

最佳答案

您必须执行以下操作:

  1. 检测图像上的红色 - 您将得到 1bit 图像,其中:0=非红色,1=红色。
  2. 检测在上一步图像中创建的三角形。您可以使用 approxPoly 函数来做到这一点。

关于JavaCV警告标志检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11795691/

相关文章:

java - 在长轮询的情况下, Atmosphere 框架会在服务器上抛出错误

c# - int rosu=Color.red.getRGB() 从 Java 到 C#

r - 找到最大轮廓并在 imageR 包中应用蒙版

c++ - 使用 CMake 编译 OpenCV 项目时出错

Java + OpenCV SVM 训练错误

java - 局部变量和全局变量同名

java - 返回到 fragment 的按钮

java - 为什么输入流以 block 的形式读取数据?

android - 物体检测android opencv

c++ - OpenCV C++ 对 cv::Moments 的使用