Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

AdriannaT

OpenCV C++, znalezienie linii, współrzędnych ich końca i przekazanie na drugi obraz

Rekomendowane odpowiedzi

Witam,

w ramach projektu na studiach tworzymy grę PaperSoccer z użyciem OpenCV.

 

Oryginalna plansza do gry wygląda tak:

 

gDVWv.jpg

 

A zdjęcie ze zrobionym jednym ruchem wygląda tak:

 

AhWTG.jpg

 

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wrzuć obrazek będący wynikiem tej różnicy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czyli tak: w przeciwległych rogach kartki dajcie plusy kalibracyjne (albo używajcie obrysu boiska jako wzornik). Przed wykonaniem diffa dopasujcie obrazki do siebie (żeby się te plusy pokryły ze sobą), czyli zmiana skali + rotacja + translacja. Powinno wyzerować całkowicie diffa i zostawić tylko kreskę, która została dostawiona.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czyli tak: w przeciwległych rogach kartki dajcie plusy kalibracyjne (albo używajcie obrysu boiska jako wzornik). Przed wykonaniem diffa dopasujcie obrazki do siebie (żeby się te plusy pokryły ze sobą), czyli zmiana skali + rotacja + translacja. Powinno wyzerować całkowicie diffa i zostawić tylko kreskę, która została dostawiona.

 

 

Jakaś podpowiedź co do tych plusów kalibracyjnych? Jest na to jakaś funkcja?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

https://automatykaonline.pl/Artykuly/Sterowanie/szybki-algorytm-dopasowania-obrazow-dla-potrzeb-fuzji-w-czasie-rzeczywistym

 

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=2ahUKEwjdx4mEyYHfAhUGXCwKHd71D3sQFjABegQICBAC&url=http%3A%2F%2Fyadda.icm.edu.pl%2Fyadda%2Felement%2Fbwmeta1.element.baztech-article-BAR0-0060-0034%2Fc%2Fhttpwww_bg_utp_edu_plartpe22011pe22011087-098.pdf&usg=AOvVaw3Ks70FKeVLCAaVzqpW1lHA

 

 

jest jeszcze możliwość zrobienia tego przy pomocy algorytmu wykrywania linii (jest opatentowany, ale na potrzeby uczelni chyba można użyć). W takim wypadku zostawałoby samo obramowanie boiska i stawiane kreski

 

nazwy nie pamiętam, trzeba by poszukać na serwerach pwr

 

http://sequoia.ict.pwr.wroc.pl/~jjakubia/AlgRobMob/

 

 

rozsądniej byłoby zapewnić to, że kartka nie będzie się ruszała względem aparatu/kamery; chyba, że nie wchodzi to w grę?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

https://automatykaonline.pl/Artykuly/Sterowanie/szybki-algorytm-dopasowania-obrazow-dla-potrzeb-fuzji-w-czasie-rzeczywistym

 

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=2ahUKEwjdx4mEyYHfAhUGXCwKHd71D3sQFjABegQICBAC&url=http%3A%2F%2Fyadda.icm.edu.pl%2Fyadda%2Felement%2Fbwmeta1.element.baztech-article-BAR0-0060-0034%2Fc%2Fhttpwww_bg_utp_edu_plartpe22011pe22011087-098.pdf&usg=AOvVaw3Ks70FKeVLCAaVzqpW1lHA

 

 

jest jeszcze możliwość zrobienia tego przy pomocy algorytmu wykrywania linii (jest opatentowany, ale na potrzeby uczelni chyba można użyć). W takim wypadku zostawałoby samo obramowanie boiska i stawiane kreski

 

nazwy nie pamiętam, trzeba by poszukać na serwerach pwr

 

http://sequoia.ict.pwr.wroc.pl/~jjakubia/AlgRobMob/

 

 

rozsądniej byłoby zapewnić to, że kartka nie będzie się ruszała względem aparatu/kamery; chyba, że nie wchodzi to w grę?

 

 

caly czas tak jest, kartka sie nie rusza ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co do tych krzyżyków, to najlepiej pojechać je w takim kolorze, który będzie rejestrowany przez kamerę i który pozwoli się łatwo przepchnąć przez progowanie. Dzięki temu zostawiacie tylko te dwa znaczki na obrazie i możecie potem policzyć TrX, TrY a następnie RotZ + ew. zmiana skali.

 

Mogą to też nie być krzyżyki. Wystarczy kropka i wyznaczenie centrum "masy".

 

Edit:

 

Mamy dwa odcinki na dwóch obrazkach. Przesuwamy punkty początkowe tak, żeby były w tym samym miejscu, a następnie obracamy drugim odcinkiem tak, żeby pokrył się z tym pierwszym (algebra 2 o ile mnie pamięć nie myli). Na koniec sprawdzamy o ile punkty końcowe są przesunięte względem siebie i robimy skalowanie.

 

Uwaga: Na diffie nadal mogą być różnice (jeśli kartka nie leży idealnie płasko, jest pognieciona itd. - można położyć pleksi i przez nie cykać, wyłączyć lampę błyskową!). Różnica oświetlenia da się zredukować progowaniem (wystarczą dwukolorowe obrazki, dalsza obróbka będzie też szybsza i mniej pamięciożerna).

 

Jeśli coś zostanie na ekranie po różnicowaniu, a co nie jest kreską, to może: a) rozmyć całość gaussem (i to takim agresywnym), b) polecieć fourierem, c) filtr do wywalenia niedobrych częstotliwości, d) odwrotny fourier, e) na ekranie zostaje tylko kreska, 4. profit!!!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...