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.
- Rejestracja:ponad 7 lat
- Ostatnio:około 7 lat
- Postów:5

- Rejestracja:około 17 lat
- Ostatnio:4 minuty
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).
- Rejestracja:ponad 7 lat
- Ostatnio:około 7 lat
- Postów:5
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);
}
