Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaCV警告标志检测?_Java_Image Processing_Opencv_Javacv - Fatal编程技术网

JavaCV警告标志检测?

JavaCV警告标志检测?,java,image-processing,opencv,javacv,Java,Image Processing,Opencv,Javacv,我看过OpenCV库的JavaCV包装器,我发现可以在Java中使用该库对图像进行人脸检测,但我想知道是否可以使用该库对图像进行检测,以及如何使用该库 我在路上拍的照片是这样的: 检测结果应该是这样或类似的: 编辑: 检测到红色后,我得到以下图像: 我有一个问题,只检测警告标志三角形形状,而忽略所有其他形状。我尝试更改cvApproxPoly参数,但没有结果。这是我的代码: public void myFindContour(IplImage image) { IplImage gra

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

我在路上拍的照片是这样的: 检测结果应该是这样或类似的:

编辑: 检测到红色后,我得到以下图像:

我有一个问题,只检测警告标志三角形形状,而忽略所有其他形状。我尝试更改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);

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


您必须执行以下操作:

  • 检测图像上的红色-您将获得1比特图像,其中:0=非红色,1=红色
  • 检测上一步图像中创建的三角形。您可以使用
    approxPoly
    函数来实现这一点

  • 请参见,首先找到轮廓区域。 将其与预先计算的值进行比较,并将其保持在一个范围内 像

    将上面的代码放在上面讨论的if块之前


    如果你想把X和Y坐标放在帖子后面….. /p> < p>看看我的答案,它是用C++,但是使用OpenCV它能检测路标,你可以把它作为一个很好的例子。


    谢谢,我一定会试试的。找到用于检测图像颜色的文章。这就是你的想法吗?希望我能为您建议的approxPoly函数找到一些东西,因为JavaCV没有太多文档。我如何使用approxPoly函数检测三角形?我不认为我可以检查轮廓的边以查看是否有3条边,因为三角形的边是圆的。有没有一种方法可以检测出三角形的形状,即使是圆边的形状?@ivandj你读过文档吗?您必须设置这样的参数,它将删除轮廓的小边。
    if(area>Mincontourarea && area<maxcontourare)
    {
    thats it  now we have the signboard do  
    }
    
    Moments moment = moments((cv::Mat)contours[index]);
           area = moment.m00;  //m00 gives the area of the detected contour