OpenCV Wykrywanie okien

0

Witam.
Mam do zrobienia program, który ma wykrywać okna na obrazie z kamery w czasie rzeczywistym. Czy jest możliwość zrobienia czegoś takiego w OpenCV i czy byłoby to ciężkie? Jakby ktoś miał też jakieś pomysły jak to ugryźć to pomysły też mile widziane.

0

Oczywiście że się da i to na różne sposoby.
najpierw robisz detekcję krawędzi, potem transformację Hough, jeśli masz dane z sensorów telefonu, to wiesz jak wygląda orientacja pionowa, wiec jesteś w stanie znaleźć linie pionowe.
Można też wyszukiwać obszary zamknięte.
Szczegóły musisz rozkminić sam.
Nie jest to proste zadanie, czeka cie dużo pracy (chyba, że skorzystasz z pomocy wujka google).

0

Dzięki za odpowiedź teraz przynajmniej wiem że warto tym sie zająć. Zastanawiałem się również nad stworzeniem klasyfikatora,czy cos takiego by zadzialalo i czy warto w to brnąć.

0

Zrobiłem klasyfikator, program w miare okna wykrywa ale problem jest teraz taki, że w jednym oknie potrafi zaznaczyć kilka różnych miejsc przez co jest jeden wielki bałagan. Jest jakiś sposób żeby może połączyć wszystkie nachodzące na siebie wyznaczone okienka w jeden większy zawierające te wszystkie w sobie, albo jakis inny sposób żeby po prostu tyle tego nie było w jednym miejscu?

Tutaj przykład wykrywania:
https://www.photobox.co.uk/my/photo?album_id=5091920843&photo_id=21865326949

Tutaj mój kod:

#include <opencv2/core/core.hpp>                        
#include <opencv2/highgui/highgui.hpp>                    
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <string>
#include <iostream>

using namespace cv;
using namespace std;

string window_cascade_name = "myhaar.xml";
CascadeClassifier window_cascade;

string window_name = "Window Detector";

void detectWindow( Mat img );

int main( int argc, char** argv )
{

	 Mat frame, img, hsv_img, binary;
	 img=imread("window.jpg");
	     if( !window_cascade.load( window_cascade_name ) )
    {
        cout << "Nie znaleziono pliku " << window_cascade_name << ".";
        return -2;
    }

    namedWindow(window_name, CV_WINDOW_AUTOSIZE);
       detectWindow(img);
    waitKey(0);
    return 0;
}

void detectWindow( Mat img )
{
    vector<Rect> windows;
    Mat img_gray;
    Mat img_window;


    cvtColor(img, img_gray,  CV_BGR2GRAY );
  
    window_cascade.detectMultiScale(img_gray, windows, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(50, 50) );
    for( unsigned i = 0; i < windows.size(); i++ )
    {
        Rect rect_window( windows[i] );    
        
        rectangle(img, rect_window, Scalar( 120, 5, 86 ), 2, 2, 0  );

        img_window = img_gray( windows[i] );
    }

    imshow(window_name, img);                       
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1