Había leído en un video en Visual Studio usando openCV y lo convertí a escala de grises, luego usé la función CV_THRESH_BINARY para convertirlo en una imagen binaria. Sin embargo, hay agujeros y ruido en los marcos. ¿Cuál es una forma simple de eliminar el ruido o los agujeros? He leído sobre las funciones Erode y Dilate en openCV, pero no tengo muy claro cómo usarlas. este es mi código hasta ahora. Si alguien puede mostrarme cómo incorporar la eliminación de ruido en mi código, sería muy apreciado.eliminando el ruido en una imagen binaria usando openCV
#include "cv.h"
#include "highgui.h"
int main(int argc, char* argv) {
CvCapture *capture = NULL;
capture = cvCaptureFromAVI("C:\\walking\\lady walking.avi");
if(!capture){
return -1;
}
IplImage* color_frame = NULL;
IplImage* gray_frame = NULL ;
int thresh_frame = 70;
int frameCount=0;//Counts every 5 frames
cvNamedWindow("Binary video", CV_WINDOW_AUTOSIZE);
while(1) {
color_frame = cvQueryFrame(capture);//Grabs the frame from a file
if(!color_frame) break;
gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height), color_frame->depth, 1);
if(!color_frame) break;// If the frame does not exist, quit the loop
frameCount++;
if(frameCount==5)
{
cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY);
cvThreshold(gray_frame, gray_frame, thresh_frame, 255, CV_THRESH_BINARY);
cvShowImage("Binary video", gray_frame);
frameCount=0;
}
char c = cvWaitKey(33);
if(c == 27) break;
}
cvReleaseImage(&color_frame);
cvReleaseImage(&gray_frame);
cvReleaseCapture(&capture);
cvDestroyWindow("Grayscale video");
return 0;
}
Lamento no haber proporcionado las imágenes, pero muchas gracias por su ayuda.Usé la función cvErode que eliminó algunos de los agujeros en la imagen, pero también trataré la borrosidad media. Cuando mencionaste usar apertura y cierre, ¿tengo que usarlos juntos o hacer CV_MOP_OPEN o CV_MOP_CLOSE? –
Aún puede proporcionarlos :) Puede usar uno de ellos o ambos, uno después del otro, depende de lo que intente obtener. Solo revise los resultados y experimente. –
Revisé los resultados y decidí que se obtuvieron mejores resultados con las funciones Erode y Dilate, así que las usaré, una después de la otra. En cualquier caso, no sé cómo proporcionar las imágenes ya que soy nuevo en stackoverflow:/Lo siento mucho. Actualmente estoy trabajando en un proyecto de procesamiento de imágenes que involucra C++ y openCV. Se basa en el reconocimiento de movimiento, por lo que si publico más preguntas, agradecería mucho si pudiera proporcionar alguna ayuda, ya que ha sido muy útil. Gracias :) –