Android java opencv - przejście z etapu 1 do 2

Android java opencv - przejście z etapu 1 do 2
KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 164
0

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.

Kopiuj
 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.

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 164
0

Wielkie dzięki za pomoc.. Poradziłem sobie, temat do zamknięcia

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.