Работаю над распознаванием фигур в OpenCV. Чтобы найти четырехугольник, смотрю на количество вершин:
while(contours)
{
result = cvApproxPoly(contours, sizeof(CvContour), storage,
CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0);
if(result->total==3 )
{
CvPoint *pt[4];
for(int i=0;i<4;i++){
pt[i] = (CvPoint*)cvGetSeqElem(result, i);
}
cvLine(src, *pt[0], *pt[1], cvScalar(0,0,250),4);
cvLine(src, *pt[1], *pt[2], cvScalar(0,0,250),4);
cvLine(src, *pt[2], *pt[3], cvScalar(0,0,250),4);
cvLine(src, *pt[3], *pt[0], cvScalar(0,0,250),4);
}
contours = contours->h_next;
}
Хорошо работает на рисунках, но на реальных фотографиях работает гораздо хуже (использую свертку, но тогда рисунки распознаются хуже). Какие еще способы можно использовать для распознавания четырехугольников? Как можно переделать преобразование Хафа для поиска прямоугольников?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости