шум в кадрах веб-камеры Python + Opencv

Я использую Opencv 2.4.5 с python 2.7 для отслеживания людей в видеонаблюдении. Сначала я использовал видео .avi и .mpeg для тестирования своего кода, теперь я хочу использовать камеру hcv-m100c. Я использую простую разницу между кадрами (исходный кадр сравнивается с каждым кадром), чтобы идентифицировать движущиеся объекты. Он очень хорошо работает с видео .avi и .mpeg, которые у меня есть, но когда я использую камеру, результаты настолько плохи. потому что в моем видео появляется много шума и пятен. Я думал, что проблема в моей камере, но я сделал видео в формате .avi с той же камерой и протестировал это видео с помощью своего кода, и оно работает нормально. Теперь я использую cv2.BackgroundSubtractorMOG, но проблема все еще существует. Итак, я думаю, что мне нужно сделать предварительную обработку, когда я использую камеру.


person Gab Hum    schedule 24.06.2013    source источник
comment
Это потому, что видеокодеки используют фильтры для сглаживания изменений между кадрами и, таким образом, удаляя шум?   -  person dilbert    schedule 25.06.2013
comment
Я пробовал это с помощью сглаживания по Гауссу, та же проблема   -  person Gab Hum    schedule 25.06.2013
comment
Возможно, вы могли бы транслировать видеокамера с чем-то вроде ffmpeg, который также может транскодировать, а затем использовать OpenCV для чтения сетевого потока   -  person dilbert    schedule 25.06.2013
comment
Для поток вместо этого.   -  person dilbert    schedule 25.06.2013
comment
Я использую эту функцию для захвата видео с камеры, cap = cv2.VideoCapture(0) Итак, как использовать поток VLC в этом случае? заранее спасибо   -  person Gab Hum    schedule 25.06.2013
comment
Я думаю, что если вы перейдете по этой ссылке VLC выше, измените cap = cv2.VideoCapture(0) на cap = cv2.VideoCapture(VLC_IP), возможно, cap = cv2.VideoCapture(127.0.0.1).   -  person dilbert    schedule 26.06.2013
comment
Я забыл опубликовать свое решение, я сделал локальную потоковую передачу с VLC, создав RTSP с этим кодом vlc "http://192.168.180.60:82/videostream.cgi?user=admin&pwd=" --sout "#transcode{vcodec=mp2v,vb=800,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=rtp{sdp=rtsp://:8554/output.mpeg},dst=display}" --sout-keep, поэтому я получил эту ссылку rtsp://:8554/output.mpeg, и теперь я могу использовать ее в OpenCV следующим образом: cap=cv2.VideoCapture("rtsp://:8554/output.mpeg") .. Спасибо @dilbert   -  person Gab Hum    schedule 27.06.2013
comment
Помогло ли это решить проблему с шумом?   -  person dilbert    schedule 28.06.2013


Ответы (1)


Просто для полноты:

Концепция решения:

Возможно, вы могли бы транслировать видеокамера с чем-то вроде ffmpeg, который также может транскодировать, а затем использовать OpenCV для чтения сетевого потока. Возможно, будет проще использовать VLC для потоковой передачи вместо.

Подробности решения:

Код потока VLC (оболочка):

vlc "http://192.168.180.60:82/videostream.cgi?user=admin&pwd=" --sout "#transcode{vcodec=mp2v,vb=800,scale=1,acodec=mpga,ab=128,channels=2,samplerate=??44100}:duplicate{dst=rtp{sdp=rtsp://:8554/output.mpeg},dst=display}" --sout-keep

Код OpenCV (Питон):

cap=cv2.VideoCapture("rtsp://:8554/output.mpeg")
person dilbert    schedule 28.06.2013