Efficiente sottrazione Sfondo con OpenCV
-
19-09-2019 - |
Domanda
che voglio fare sottrazione dello sfondo in un file video utilizzando il metodo OpenCV. In questo momento sono in grado di fare la sottrazione dello sfondo, ma il problema è che non ho potuto ottenere l'output in modalità colore. Tutto l'uscita dopo aver sottratto il fondo è in arrivo in modalità a colori in scala di grigi . ( voglio ottenere le informazioni colore in primo piano, che è l'uscita risultante dopo sfondo ottenuto sottratto
.Posso farlo utilizzando la tecnica di mascheramento ?? come la seguente procedura che sto pensando.
- Capture Input -
InputFrame
(RGB) - Processo
InputFrame
- Sottrai sfondo, negozio di primo piano nella
TempFrame
(che sta arrivando in scala di grigi () - Creare una maschera usando
TempFrame
- Applicare la maschera creata per il
InputFrame
- Ottieni primo piano colorato come
OutFrame
Sono colpito con fare la mascheratura utilizzando OpenCV. Sono solo un principiante in OpenCV. Ti prego, aiutami a superare questo.
Grazie in anticipo.
Soluzione
Va bene, non capisco come TempFrame (il vostro primo piano) potrebbe essere scala di grigi se si utilizza sottrazione del fondo. È necessario utilizzare un algoritmo molto speciale. Ma supponendo TempFrame è in scala di grigi, allora si potrebbe fare questo:
cv::Mat mask = tempFrame > 0.5;
cv::Mat outFrame;
capturedFrame.copyTo(outFrame, mask);
Questo è il codice OpenCV 2.0 sopra. Il numero 0.5 è una soglia, è necessario impostare a qualcosa di appropriato. Se non stai usando le immagini in virgola mobile, si sarebbe probabilmente imposta a 128 o qualcosa di simile. Questa è la stessa cosa in OpenCV Codice 1.1:
CvMat* mask = cvCreateMat(tempFrame.rows, tempFrame.cols, CV_8UC1);
cvCmpS(tempFrame, 0.5, mask);
CvMat* outFrame = cvCreateMat(capturedFrame.rows, capturedFrames.cols, CV_32FC3);
cvCopy(capturedFrame, outFrame, mask);
Altri suggerimenti
codice è qui
per raggiungere un primo piano di colore immagine basta copiare utilizzando la maschera di primo piano
// image.copyTo (in primo piano, primo piano);