Работаю над распознаванием фигур в 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;
}
Хорошо работает на рисунках, но на реальных фотографиях работает гораздо хуже (использую свертку, но тогда рисунки распознаются хуже). Какие еще способы можно использовать для распознавания четырехугольников? Как можно переделать преобразование Хафа для поиска прямоугольников?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей