Jako rodzaj "projektu wakacyjnego" bawię się z OpenCV i chcę wykryć i zmierzyć rzeczy.OpenCV C++/Obj-C: Właściwe wykrywanie obiektów
Aktualny workflow (wczesny etap - detekcja):
- Konwersja na skalę szarości (CV :: cvtColor)
- Zastosuj próg adaptacyjnego (cv :: adaptiveThreshold)
- Zastosuj canny (CV: : Canny)
- Znalezienie kontury (cv :: findContours)
Mój wynik jest dosyć słaba i nie jestem pewien, co jest righ t kierunek do przejścia. Mam już działającego cvBloba przy mojej obecnej konfiguracji (OSX 10.7.2, Xcode 4.2.1). Czy jest to lepszy sposób na przejście? Jeśli tak, jak mogę go wdrożyć we właściwy sposób?
Czy muszę najpierw odejmować tło? Próbowałem to, ale nie był w stanie znaleźć kontury potem
Oto moje zdjęcie:
A to moje wyjście, gdy rysuję moje kontury z powrotem do pierwszego obrazu:
UPDATE
mam to działa w moim programm i moje wyjście wygląda nieco inaczej ...
- (IBAction)processImage:(id)sender
{
cv::Mat forground = [[_inputView image] CVMat];
cv::Mat result = [self isolateBackground:forground];
[_outputView setImage:[NSImage imageWithCVMat:result]];
}
- (cv::Mat)isolateBackground:(cv::Mat &)_image
{
int rh = 255, rl = 100, gh = 255, gl = 0, bh = 70, bl = 0;
cv::cvtColor(_image, _image, CV_RGB2HSV_FULL);
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat bgIsolation;
cv::inRange(_image, cv::Scalar(bl, gl, rl), cv::Scalar(bh, gh, rh), bgIsolation);
bitwise_not(bgIsolation, bgIsolation);
erode(bgIsolation, bgIsolation, cv::Mat());
dilate(bgIsolation, bgIsolation, element);
return bgIsolation;
}
Wielkie dzięki! Czy możesz rzucić okiem na mój kod? – dom
@moosgummi Powodem, dla którego otrzymujesz inne wyniki, jest przekształcenie się w przestrzeń kolorów HSV. Moje progi dotyczyły przestrzeni RGB. Możesz użyć HSV, ale musisz znaleźć odpowiednie zakresy dla tej przestrzeni. Możesz dodać tę konwersję kolorów do mojej przykładowej aplikacji i wypróbować ją. Wyobrażam sobie, że musisz martwić się tylko o kanały barw i nasycenia, ponieważ kanał wartości nie zawiera żadnych informacji o kolorach (tzn. Zakres wartości nie zostałby zmieniony [0, 255]). Mam nadzieję, że pomaga! – mevatron
Ach, ok, więc powinno działać lepiej w RGB?bl, gl i rl to wartości niebieskie, zielone i czerwone. Czy mam rację? – dom