我看过JavaCV封装的OpenCV库,发现可以在Java中使用该库对图像进行人脸检测,但我想知道是否可以使用该库在图像上检测交通警示标志,如果可以,如何实现?
我有从路上拍摄的图片,看起来像这样:http://www.4shared.com/photo/5QxoVDwd/041.html 检测结果应该类似于这个或类似于这个:http://www.4shared.com/photo/z_pL0lSK/overlay-0.html 编辑: 在检测到红色后,我得到了这张图片:
这是我得到的输出结果(我为每个形状使用了不同的颜色,但在最终输出中,我将仅使用白色来检测警告标志,其他所有内容都保持黑色):
我有从路上拍摄的图片,看起来像这样:http://www.4shared.com/photo/5QxoVDwd/041.html 检测结果应该类似于这个或类似于这个:http://www.4shared.com/photo/z_pL0lSK/overlay-0.html 编辑: 在检测到红色后,我得到了这张图片:
我有一个问题,希望能够检测出警告标志三角形的形状,并忽略其他所有形状。我尝试更改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);
}
这是我得到的输出结果(我为每个形状使用了不同的颜色,但在最终输出中,我将仅使用白色来检测警告标志,其他所有内容都保持黑色):