Przeczytałem w wideo w Visual Studio przy użyciu openCV i przekonwertowałem go na skalę szarości, a następnie użyłem funkcji CV_THRESH_BINARY, aby przekonwertować ją na obraz binarny. W ramkach występują jednak dziury i szum. Jaki jest prosty sposób na usunięcie hałasu lub dziur? Czytałem o funkcjach Erode i Dilate w openCV, ale nie jestem zbyt jasny, jak z nich korzystać. to jest mój kod do tej pory. Jeśli ktokolwiek może mi pokazać, jak włączyć usuwanie szumów do mojego kodu, byłoby to bardzo cenne.usuwanie szumów w obrazie binarnym za pomocą 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;
}
Przykro mi z powodu braku zdjęć, ale dziękuję bardzo za pomoc.Użyłem funkcji cvErode, która usunęła niektóre z dziur w obrazie, ale spróbuję także mediany rozmycia. Kiedy wspomniałeś o używaniu otwierania i zamykania, czy muszę używać ich razem, czy też CV_MOP_OPEN lub CV_MOP_CLOSE? –
Nadal możesz je dostarczyć :) Możesz użyć jednego z nich lub obu, jeden po drugim, to zależy od tego, co próbujesz uzyskać. Po prostu sprawdź wyniki i eksperymentuj. –
Sprawdziłem wyniki i zdecydowałem, że lepsze wyniki uzyskano dzięki funkcjom Erode i Dilate, więc wykorzystam je jeden po drugim. W każdym razie nie wiem, jak dostarczyć obrazy, ponieważ jestem nowy w stackoverflow:/Bardzo mi przykro. Obecnie pracuję nad projektem przetwarzania obrazu, który obejmuje C++ i openCV. Opiera się na rozpoznawaniu ruchu, więc gdybym zadał więcej pytań, byłbym bardzo wdzięczny, gdybyś mógł udzielić pomocy, ponieważ już byłeś bardzo pomocny. Dziękuję :) –