2013-07-29 5 views
0

저는 OpenCV 2.4.2 VideoCapture 클래스를 사용하여 여러 비디오의 프레임을 잡아 내 목표는 유사한 비디오 (시각적으로 비슷한)를 검색하기 위해 비디오 사이의 프레임을 비교하는 것입니다.OpenCV를 사용하여 비디오에서 검정/빈 프레임 감지하기

두 가지 문제가 있습니다.

  1. 동영상에 빈 프레임이 포함되어 있습니다. (비디오를 캡처하는 동안) 각 개별 프레임을 반복 할 수 있고 픽셀 등을 확인하여 이러한 프레임을 감지 할 수 있습니다. 어떻게 든 이렇게하는 더 빠르고 효율적인 방법이 있습니까? 1k 이상의 동영상을 보유하고 있으며 각 동영상에는 약 5k ~ 20k 프레임이 있습니다. [초당 1 프레임을 캡처하고 있습니다.] 나는 C++로 코딩하고있다.

  2. 두 개의 거대한 행렬을 비교하여 어떻게 "유사"한지 확인합니다. 결국 행 수가 프레임 수에 해당하는 각 비디오의 거대한 행렬을 계산하고 각 프레임에서 계산되는 디스크립터의 차원에 해당하는 열을 찾습니다. 유사성을 위해 두 개의 비디오를 비교할 필요가 있다면, 내가 찾은 가장 간단한 것은 유클리드 행렬을 계산하는 것이 었습니다. 하지만 다시 말하지만, 동영상을 최대 1000까지 확장 할 경우 매우 비효율적입니다.

모든 조언과 제안을 부탁드립니다. 첫 번째 문제에 관한

덕분에,

+0

# 1의 경우 확률 론적 테스트를 사용할 수 있습니다. n 임의의 픽셀 위치를 선택하고 모든 픽셀 위치가 프레임에서 검은 색인지 확인합니다. 그들 모두가 그렇다면, 공백으로 선언하십시오. 귀하의 n이 높을수록 정확도가 높아지고 (귀하의 리콜은 완벽 할 것입니다), 낮은 n은 빨리 달릴 것입니다. – Hammer

+0

피드백에 감사드립니다. B, G, R 채널의 평균을 계산하고 조건을 추가하여이를 해결했습니다. 그것은 효과가 있었고 프로그램을 전혀 늦추지 않았습니다. 이슈 # 2는 여전히 해결되지 않은 상태로 남아 있습니다. – Uni

답변

0

나는 이력서 :: countNonZero 가장 sutable 변형이 매우 빠르게 일을 생각합니다.

+0

cv :: countNonZero는 단일 채널 이미지에 대해서만 올바르게 작동한다고 생각하십니까? RGB (또는 오히려 BGR) 이미지가 있습니다. – Uni

+0

당신은 cv :: split 함수로 이미지를 쪼갤 수 있고 하나의 채널 만 체크 할 수 있습니다 (충분하다고 생각합니다). –

관련 문제