Open Cv i C++

KJ
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 12 lat
0

Od długiego czasu męczę się z zainstalowaniem open CV i połączeniem z jakimś środowiskiem programistycznym. Tak, wiem, w internecie jest kilka manuali do tego, niestety niewiele mi one dały i mam z tym wielki problem - czy to pod windowsem 7, czy pod ubuntu. Ostatecznie zainstalowałem Open CV 2.1 i Visuala C++ 2010 Express pod windą, mniej więcej wg tego poradnika:
poradnik

Wrzuciłem program wczytujący zdjęcie w jpg, wyświetlający je, wypisujący szerokość i wysokość, do wartości RGB poszczególnych pixeli też mogę się dostać. Natomiast jeśli chcę przejść na skalę szarości funkcją cvtColor lub przefiltrować obraz funkcją GaussianBlur - wynikowy obraz jest jednolicie szary, niezależnie od wczytanego zdjęcia wejściowego.

Nie wiem już, czy cały czas źle stosuję funkcje open CV (przypominam - wersja 2.1!), czy dostaję szary obraz bo nadal coś mam źle polinkowane i Visual jakoś nie wie jak te funkcje wykonywać.

Oto kod:

Kopiuj
#include <iostream>
#include <math.h>

#include <cv.h>
#include <highgui.h>

using namespace std;
using namespace cv;

int main()
{
	
	/* wczytanie zdjecia  */
	Mat image;	
	image = imread("test.jpg",1);  

	/* wyswietlenia liczby kolumn i wierszy */
	cout<<"Liczba kolumn (szerokosc) : ";
	cout<<image.cols<<endl;
	cout<<"Liczba wierszy (wysokosc) : ";
	cout<<image.rows<<endl<<endl;
	
	/* odczytanie i wyswietlenie kolorow danego pixela */
/*	cv::Vec3b pixelColor = image.at<cv::Vec3b>(20, 600);
	int p1 = pixelColor[0];
	int p2 = pixelColor[1];
	int p3 = pixelColor[2];
	cout<<p1<<" ; "<<p2<<" ; "<<p3<<endl; */

	/* zmiana rozmiary zdjecia */
/*  Mat resized(100,100, image.type());
    resize(image, resized, resized.size()); */
	
	/* wyswietlenie zdjecia */
/*	imshow("Nazwa okna", image);
    waitKey();  */

	/* PRZEJSCIE NA SKALE SZAROSCI */
/*	Mat grayImage;
	cvtColor(image, grayImage, CV_BGR2GRAY);
	Mat resized(500,500, image.type());
        resize(grayImage, resized, resized.size());
	imshow("Nazwa okna", resized); */

        /* ZASTOSOWANIE BLURA */
/*	GaussianBlur( image, image, Size(9, 9), 2, 2 );
	Mat resized(500,500, image.type());
        resize(image, resized, resized.size());
	imshow("Nazwa okna", image); */

	system("pause");
	return 0;
}

Jak mówiłem, w tym programie zasadniczo nie działają fragmenty kodu zatytułowane "PRZEJSCIE NA SKALE SZAROSCI" i " /* ZASTOSOWANIE BLURA */" - jaki obrazek jpg bym nie wczytal, czy bede zmienial jego rozamir czy nie, czy uzyje CV_BGR2GRAY czy CV_RGB2GRAY - zawsze dostaje jednolicie szary obraz.

Już mnie złość bierze od siedzenia nad tym, będę zobowiązany jeśli ktoś z poprawnie zainstalowanym open cv 2.1 wrzuci mój kod i sprawdzi, czy zonk leży w złym zaprogramowaniu, czy jednak mam źle polinkowany open cv i Visual.

Za wszelką, możliwie rychłą pomoc - stukrotne dzięki!

edytowany 4x, ostatnio: msm
Patryk27
Znacznik to &lt;code&gt;, a nie [code].
KJ
msm
Ja poprawiłem na &lt;code=cpp&gt; i [url] na <url> jeśli nie masz nic przeciwko, wygląda ładniej.
KJ
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 12 lat
0

Jako że pozostaję w podobnym temacie, i nie chcę tworzyć gigantycznego postu, dla przejrzystości tematu pozwolę sobie dodać post pod postem.

Okazało się, że problemem jest polecenie system("pause"), wystarczy je zmienić na waitKey().

Natomiast mam gorącą prośbę o pomoc do kogoś, kto ogrania trochę przetwarzanie obrazów albo/i Open CV. Chcę wykryć za pomocą funkcji HoughCircles (chyba że istnieje jakaś inna, o której nie wiem) białą kulkę zarejestrowaną na zdjęciu jpg dodanym w załączniku. Używam OpenCV 2.1 i Visuala 2010 Express, pod Win7 x64. Niestety, mimo sporego kombinowania nie umiem ustawić parametrów tej funkcji tak, żeby wykryć tą białą kuleczkę. Nie wiem, czy podaję nieodpowiednie parametry, czy ta kuleczka jest zbyt mała/zbyt rozmazana.

Niżej umieszczam kod. Zamieniam obraz kolorowy na odcienie szarości. Dalej zastanawiam się nad użyciem funkcji GaussianBlur, żeby rozmyć obrazek i pozbyć się szumów - niestety, nie udało mi się dobrać parametru filtru tak, żeby jakoś zredukować szumy - obraz po filtracji był bez zmian. Tutaj nie wiem - czy przed szukaniem okręgów użyć Blura czy nie, a jeśli tak, na jakich ustawieniach. I dalej najważniejsze - potrzebuję pomocy przy dobraniu argumentów funkcji HoughCircles tak, żeby wykrywała biała kuleczkę.

Kopiuj
#include <iostream>
#include <math.h>

#include <cv.h>
#include <highgui.h>

using namespace std;
using namespace cv;

int main()
{
    /* wczytanie zdjecia */
    Mat image;    
    image = imread("mala_kulka.jpg",1); 

    /* wyswietlenia liczby kolumn i wierszy */
    cout<<"Liczba kolumn (szerokosc) : ";
    cout<<image.cols<<endl;
    cout<<"Liczba wierszy (wysokosc) : ";
    cout<<image.rows<<endl<<endl;
    
    /* odczytanie i wyswietlenie kolorow danego pixela (niewazne) */
/*    cv::Vec3b pixelColor = image.at<cv::Vec3b>(20, 600);
    int p1 = pixelColor[0];
    int p2 = pixelColor[1];
    int p3 = pixelColor[2];
    cout<<p1<<" ; "<<p2<<" ; "<<p3<<endl; */

    /* zmiana rozmiary zdjecia */ /*
 /*   Mat resized(100,100, image.type());
    resize(image, resized, resized.size()); */
    
 
        /* PRZEJSCIE NA SKALE SZAROSCI */
    Mat grayImage;
    cvtColor(image, grayImage, CV_RGB2GRAY);

        /* DETEKCJA KULECZKI */
    vector<Vec3f> circles;
    HoughCircles(grayImage, circles, CV_HOUGH_GRADIENT,
                 2, 50,    500,300,  5,100 );
        
    cout<<"znalezionych okregow: "<<circles.size()<<endl;

    for( size_t i = 0; i < circles.size(); i++ )
    {
         Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
         int radius = cvRound(circles[i][2]);
         // draw the circle center
         circle( image, center, 3, Scalar(252,3,0), -1, 8, 0 );
         // draw the circle outline
         circle( image, center, radius, Scalar(252,3,0), 3, 8, 0 );        
    }

    Mat resized(800,800, image.type());
        resize(image, resized, resized.size());
    imshow("Nazwa okna", resized);


    waitKey(); 
    return 0;
} 

A oto zdjęcie, na którym pracuję:
http://photoupload.pl/images/2012/10/07/yFs9Y.jpg

Ponownie będę cholernie zobowiązany za pomoc z tematem.

edytowany 2x, ostatnio: msm
msm
I tutaj tak samo, ładniejszy post = większa szansa że ktoś przeczyta.
CO
Skoro nie udało się dobrać filtru Gaussa do pozbycia się szumów z obrazu, to może spróbuj z filtrem medianowym.
EE
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
0

Z tego co pamiętam (niech ktoś mnie poprawi, jeśli się mylę), nie wykryje Ci nic "mądrego" na zwykłym obrazie. Pierwsze, co musisz zrobić, to znaleźć krawędzie na obrazie - najszybciej filtrem Canny'ego (cvCanny czy jakoś tak). Dopiero na tym możesz szukać jakichś prymitywów.


"Robienie w Javie moge porównac do spuszczania wody w kiblu za pomoca wiadra z wodą przyniesioną ze studni zza 7 gór, którą się dodatkowo samemu wykopało łyżeczką do słodzenia herbaty."
DE
  • Rejestracja:prawie 13 lat
  • Ostatnio:około rok
  • Postów:22
0

http://www.aishack.in/2010/07/tracking-colored-objects-in-opencv/

napisane przy użyciu starej wersji opencv, ale dzięki dokumentacji nie powinieneś mieć problemu z przełożeniem tego na nowszą wersję...
wszystko jest tam wytłumaczone bardzo dokładnie - naklepanie kodu, dzięki któremu będziesz w stanie śledzić kulkę nie powinno Ci zająć dłużej niż kilkadziesiąt minut :p

edytowany 1x, ostatnio: debris
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)