Как распознать парковку с помощью OpenCV / JavaCV?
Я пытаюсь распознать парковку с помощью JavaCV
У меня есть изображение, как это (с углом):
И я хотел бы, чтобы программное обеспечение могло распознавать места и выделяться, получая координаты, вот так (извините за плохой фотошоп):
Мой код до сих пор:
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);
Как я могу сделать вывод изображения? Кто-нибудь знает? Благодарю.
1 ответ
Если вы примените фильтр Габора:
http://en.wikipedia.org/wiki/Gabor_filter
http://mplab.ucsd.edu/tutorials/gabor.pdf
вместо гауссова вы можете применять различные углы и находить лучший результат сопоставления по величине отклика. Итак, угол фильтра Габора, который дает вам лучший результат, - это то, что вам нужно. Вы можете использовать этот угол для рисования прямоугольника. Для определения угловых точек парковки вы можете применить базовый метод "Маркировка подключенных компонентов".
Если ваша система работает в режиме реального времени и время ответа важно для вас. Вам нужно найти градиент изображения, применив один из методов обнаружения краев, например, "Canny"