如何使用OpenCV/JavaCV识别停车场?
我正在尝试使用JavaCV识别停车场 我有一张这样的照片(带角度): 我希望软件能够识别位置和突出点,获得坐标,就像这样(很抱歉photoshop不好): 我的代码到现在为止:如何使用OpenCV/JavaCV识别停车场?,opencv,image-recognition,javacv,parking,Opencv,Image Recognition,Javacv,Parking,我正在尝试使用JavaCV识别停车场 我有一张这样的照片(带角度): 我希望软件能够识别位置和突出点,获得坐标,就像这样(很抱歉photoshop不好): 我的代码到现在为止: imgOriginal = cvLoadImage("D:\\imagem\\original2.JPG"); imgModify = cvCreateImage(cvGetSize(imgOriginal), IPL_DEPTH_8U, 1); imgOut = cvCloneImage(imgOriginal)
imgOriginal = cvLoadImage("D:\\imagem\\original2.JPG");
imgModify = cvCreateImage(cvGetSize(imgOriginal), IPL_DEPTH_8U, 1);
imgOut = cvCloneImage(imgOriginal);
cvSmooth(imgOut, imgOut, CV_GAUSSIAN, 3);
cvCvtColor(imgOut, imgModify, CV_BGR2GRAY);
cvThreshold(imgModify, imgModify, 0, 255, CV_THRESH_BINARY + CV_THRESH_OTSU);
cvErode(imgModify, imgModify, null, 1);
CvMemStorage storage = cvCreateMemStorage(0);
CvSeq cvSeq = cvCreateSeq(0, Loader.sizeof(CvContour.class), Loader.sizeof(CvSeq.class), storage);
cvFindContours(imgModificada, storage, cvSeq, Loader.sizeof(CvContour.class), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
int objects = 0;
CvRect region;
for (; cvSeq != null; cvSeq = cvSeq.h_next()) {
double areaObject = Math.abs(cvContourArea(cvSeq, CV_WHOLE_SEQ, 0));
if (areaObject > 500) { //ignore small contours
objects++;
region = cvBoundingRect(cvSeq, 0);
cvRectangle(imgOut, cvPoint(region.x(), region.y()), cvPoint(region.x() + region.width(), region.y() + region.height()), CvScalar.BLUE, 1, CV_AA, 0);
}
}
System.out.println(objects);
cvShowImage("Out", imgOut);
cvWaitKey(0);
cvReleaseImage(imgOut);
如何输出图像?有人知道吗?谢谢。如果应用Gabor过滤器: 您可以应用不同的角度,从响应的大小中找到最佳匹配结果,而不是高斯。所以,gabor滤波器的角度是你需要的,它能给你最好的结果。可以使用此角度绘制矩形。要查找停车场的角点,可以应用基本的“连接组件标签”方法
如果您的系统是实时的,并且响应时间对您很重要。如果应用Gabor滤波器,则需要通过应用诸如“Canny”之类的边缘检测方法之一来查找图像的梯度: 您可以应用不同的角度,从响应的大小中找到最佳匹配结果,而不是高斯。所以,gabor滤波器的角度是你需要的,它能给你最好的结果。可以使用此角度绘制矩形。要查找停车场的角点,可以应用基本的“连接组件标签”方法
如果您的系统是实时的,并且响应时间对您很重要。你需要通过应用像“Canny”这样的边缘检测方法来找到图像的梯度我想这可能会有点帮助我想这可能会有点帮助