Come una sorta di "progetto di vacanza" sto giocando con OpenCV e voglio rilevare e misurare le cose.OpenCV C++/Obj-C: rilevamento oggetto corretto
flusso di lavoro attuale (fase iniziale - rilevamento):
- Converti in scala di grigi (cv :: cvtColor)
- Applicare soglia adattiva (cv :: adaptiveThreshold)
- Applicare Algoritmo di Canny (cv: : Canny)
- Trovare contorni (cv :: findContours)
il mio risultato è un pò scadente e non sono sicuro che cosa è il righ t direzione da seguire. Ho già ottenuto cvBlob lavorando sotto la mia attuale configurazione (OSX 10.7.2, Xcode 4.2.1) è un modo migliore per andare? In tal caso, come posso implementarlo nel modo giusto?
Oppure devo prima sottrarre il background? Ci ho provato, ma non sono riuscito a trovare contorni dopo
Ecco la mia immagine:
E questa è la mia uscita, quando disegno i miei contorni di nuovo nella prima immagine:
UPDATE
ho preso a lavorare nel mio programma e la mia uscita sembra un po 'diverso ...
- (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;
}
Grazie mille! Puoi dare un'occhiata al mio codice? – dom
@moosgummi Il motivo per cui si sta ottenendo un output diverso è perché ci si sta trasformando nello spazio colore HSV. Le mie soglie erano per lo spazio RGB. Puoi usare HSV, ma dovrai trovare gli intervalli appropriati per quello spazio. È possibile aggiungere la conversione del colore alla mia applicazione di esempio e provarla. Immagino che dovrai preoccuparti solo dei canali Tonalità e Saturazione poiché il canale Valore non contiene alcuna informazione sul colore (ad esempio, l'intervallo di valori non verrà toccato [0, 255]). Spero possa aiutare! – mevatron
Ah ok, quindi dovrebbe funzionare meglio in RGB?bl, gl e rl sono valori blu, verdi e rossi. Ho ragione? – dom