Witam!
Bardzo Was proszę o pomoc w rozwiązaniu mojego, no myślę dość prozaicznego problemu (w programowaniu obiektowym jestem jeszcze newbie :). Generalnie moim zadaniem jest napisanie aplikacji na androida wykonującej operacje na obrazie z kamery wykorzystując bibliotekę opencv.
Podzieliłem zadanie na kilka etapów.
W 1 chciałbym wykryć i wyrysować kontur płyty CD i w przypadku kiedy JUŻ RAZ zostanie wykryta, nie wracać więcej do tego etapu, tylko przejść do etapu 2 (którym jest wykrycie twarzy) wyświetlając odpowiedni komunikat. Operując jedynie na prostej konstrukcji "if" jak do tej pory, w programie cały czas jest "aktywna" funkcja szukania okręgu (działa bezetapowo, cały czas od momentu uruchomienia wyszukuje zarówno twarz jak i płytę).
Niżej zamieszczam niezbędny kod, niepotrzebne tu fragmenty usunąłem, kluczową część oznaczyłem: (*), okey, here we go.
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
(...)
MatOfRect faces = new MatOfRect();
MatOfPoint plyta = new MatOfPoint();
MatOfPoint cialo = new MatOfPoint();
Rect[] facesArray;
switch (viewMode) {
case TRYB_RGB:
(...)
//wykrywanie twarzy
wykrywanie.detectMultiScale(mGray, faces, 1.15, 5, 2, new Size(absoluteFaceSize, absoluteFaceSize), new Size());
(...)
//wykrywanie plyty CD (O TĄ CZĘŚĆ KODU MI CHODZI *)
Imgproc.HoughCircles( mGray, plyta, Imgproc.CV_HOUGH_GRADIENT, 1, 0.01, 150, 160, 0, 0 );
if(plyta.empty()) Core.putText(mRgba, brak_plyty, new Point(0, 45), Core.FONT_HERSHEY_SIMPLEX, 0.5, kolor_zly);
if(!plyta.empty()) Core.putText(mRgba, plyta_ok, new Point(0, 45), Core.FONT_HERSHEY_SIMPLEX, 0.5, kolor_ok);
//(*)
(...)
//rysowanie twarzy
for (int i = 0; i <facesArray.length; i++)
{
Core.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 200, 200, 255), 2);
}
//rysowanie okręgu
for (int x = 0; x < plyta.cols(); x++)
{
(...)
}
break;
Kurde męczę się z tym już długi czas. Myślę że chodzi o jakąś prostą rzecz, typu zwrócenie czegoś przez return tudzież inne proste rozwiązanie.
Czekam z niecierpliwością na Waszą pomoc ;)
pozdr.