Witam,
w ramach projektu na studiach tworzymy grę PaperSoccer z użyciem OpenCV.
Oryginalna plansza do gry wygląda tak:
A zdjęcie ze zrobionym jednym ruchem wygląda tak:
Używamy funkcji, które usuwają perspektywę na zdjęciu z ruchem i jesteśmy w stanie znaleźć współrzędne punktów, po których będziemy się poruszać tj. kropek. SOURCE CODE
Chcemy znaleźć miejsce w którym został wykonany ruch i przenieść go na planszę oryginalną.Próbowaliśmy użyć funkcji > absdiff(img1,img2,result)
aby znaleźć różnicę między zdjęciem planszy oryginalnej a pierwszym ruchem, następnie ruchem pierwszym a drugim itd, a następnie użyć funkcji wykrywającej i rysującej linie w miejscu w którym została znaleziona.
int DetectLines(Mat src, const char* sourceName, const char* destName){
Mat dst, cdst;
Mat zapisz;
zapisz = imread("plansza3.jpg",0);
Canny(src, dst, 50, 200, 3);
cvtColor(dst, cdst, COLOR_GRAY2BGR);
vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI / 180, 20, 10, 5);
for (size_t i = 0; i < 1; i++)
{
Vec4i l = lines[i];
line(zapisz, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, 2);
}
imshow(destName, zapisz);
return 0;
}
Jednak nie działą to poprawnie.
Tak naprawdę potrzebne nam są współrzędne znalezionej linii, aby przekazać je do logiki gry. Jednak nie wiemy jak zrobić, aby punkty z naszej planszy ze zdjęcia odpowiadały punktom planszy oryginalnej i aby za każdym razem wykrywało tylko nowy ruch, a nie wszystkie poprzednie.