2010-04-27 3 views
4

최근에 BMP 이미지의 이미지 처리를위한 C 프로그램을 작성하여 픽셀 값을 읽고 처리해야만 BMP 헤더 내용을 따르는 것이 매우 간단 해졌고 BMP 이미지의 대부분의 정보를 얻을 수있었습니다.동영상의 픽셀 값을 읽는 방법은 무엇입니까?

이제 비디오는 (프레임 단위로) 비디오를 처리하는 것이지만 어떻게해야합니까? 비디오 클립에서 이미지 프레임 연속 스트림의 헤더를 어떻게 읽을 수 있습니까? 아니면, 예를 들어, mpeg 형식도 범용 헤더를 갖게 될 것입니다. 전체 비디오에 대한 정보를 얻을 수있는 읽을 때마다 헤더 다음에 모든 데이터는 픽셀입니다.

내가 전달할 수 있기를 바랍니다.

비디오 처리 경험이있는 사람이 있습니까?

모든 책 또는 자습서 링크는 매우 유용합니다.

답변

4

MPEG과 같은 비디오 스트림은 (분명히) 지속 시간 및 해당 프레임 속도에 종속 된 여러 프레임으로 구성됩니다. 픽셀을 읽으려면 이전 프레임에서 스트림으로 종속되지 않는 인트라 프레임부터 시작해야합니다. 연속적인 프레임은 이전 프레임에서 시간적으로 종속 된 프레임이므로 해당 픽셀을 얻으려면 Intra에서 원하는 프레임으로 스트림을 디코딩해야합니다.
기본적으로 인트라 프레임은 주기적으로 삽입되어 스트림과 동기화 할 수있는 방법을 디코더에 제공합니다. 이는 오류가 발생할 수있는 상황에서 매우 유용합니다.
당신이하고 싶은 일은 쉬운 일이 아닙니다. MPEG 디코더를 사용해야하고 필터 나 기타와 같은 사후 처리를 원한다면 프레임을 재생하기 전에 프레임을 수정해야합니다.
비디오 코딩을 배우고 표준 MPEG에서부터 많은 자료를 찾을 수 있습니다.

+0

감사합니다. Maurizio 제안 사항. 난 단지 몇 가지 명확한 설명이 필요합니다. MPEG는 jpeg와 같은 압축 된 형식입니다. 압축되지 않은 원시 형식의 비디오 형식 (BMP 이미지 라인)이 있습니까? 비디오 디코더를 피하고 싶습니다. 또한, 다음 문장을 올바르게/잘못했는지 제안하십시오. RAW 비디오 형식에는 디코더가 필요하지 않습니다. – HaggarTheHorrible

+0

저는 RAW 디코더로 일한 적이 없지만 귀하의 진술이 옳다고 생각합니다. 미안해, 너 한테 그런 걸 제안 할 수는 없어. –

+0

안녕하세요, Maurizio, 나는 며칠 전 새로운 질문을 올렸습니다 한번 한번보세요. 그 제목은 : 웹캠 비디오 스트림 프로세싱. 아직 조회수는 9 회 뿐이며 아직 답변이 없습니다. – HaggarTheHorrible

2

나는 FFMpeg을 조사하는 것이 좋습니다. 그것은 영화에서 프레임을 잡아 JPG와 같은 이미지로 덤프 할 수있는 명령 줄 유틸리티를 가지고 있습니다. 그런 다음 기존 판독기를 수정하여 JPG 파일을 처리 할 수 ​​있습니다 (JPG를 원시 픽셀 버퍼로 디코딩하기 위해 libjpeg와 같은 것을 사용하십시오).

또는 FFMpeg API (C, Python, 기타)를 사용하고 프로그래밍 방식으로 프레임 캡처를 수행하고 비디오를 이동할 때 픽셀을 볼 수 있습니다. 비디오 포맷은 복잡하기 때문에 모든 다른 코덱에 대한 이해를 시작하지 않으려면 라이브러리를 가져 와서 원시 픽셀 버퍼로 디코딩해야합니다.

+0

감사합니다. SB. Jason과 Maurizio에 게시 한 몇 가지 질문에 답변 해 주실 수 있습니까? – HaggarTheHorrible

+0

압축되지 않은 많은 비디오를 찾을 수 없습니다. RAW 형식이 동영상에 어떻게 배치되어 있는지 알지 못합니다. 이미지의 경우 BMP와 거의 비슷하지만 색상 공간이 다를 수 있습니다. 색상 공간 변환이 필요할 수 있습니다. 나는 정말로 당신이 bmp에 비디오 프레임을 침을 뱉어 다음 프로그램을 사용하거나 ffmpeg libs로 작업 할 ffmpeg 명령 줄 도구를 사용해야한다고 생각합니다. 제이슨은 기본적으로 내 대답에서 제안했던 것과 똑같은 말을했다. –

1

MPEG 1/2/4 비디오는 압축되어 있기 때문에 비트 맵보다 처리하기가 훨씬 어렵습니다. 비트 맵 데이터를 사용하면 실제 색상 값이 파일에 직접 저장됩니다. MPEG 또는 JPEG의 경우 색상 정보는 파일에 기록되기 전에 숫자 변환을 거칩니다. 이러한

  • 는 RGB 등 -> YUV 420P (서브 샘플링 된 크로 미 넌스)는
  • 이산 코사인 변환
  • 가중 양자화
  • 지그재그 (
  • 차동 부호화
  • 가변 길이 부호화 주문 허프만 형)

이 모든 것은 s 파일에서 픽셀 데이터를 파싱하는 방법을 구현합니다.표준의 모든 세부 사항을 연구하고 자신의 디코더를 작성하거나 ffmpeg와 같은 비디오 디코딩 라이브러리를 사용하여 작업을 수행해야합니다. ffmpeg는 비디오를 정지 이미지 (see answers this recent question)로 변환 할 수 있습니다. 또한 ffmpeg 라이브러리 (libavformat 및 libavcodec)에 직접 인터페이스 할 수 있습니다. 좋은 자습서는 this question에 대한 답변을 참조하십시오.

+0

본인은 동의하지 않습니다. 그것은 당신이해야하는 처리 유형에 달려 있습니다. 예를 들어 간단한 흐리게 처리하는 경우 디코더를 변경하지 않고도 표시 할 프레임의 복사본에서 처리 할 수 ​​있습니다. 디코더를 변경하는 것은 디코딩 프로세스에 관한 심각한 의미를 포함 할 수 있습니다. 디코더는 표준이어야합니다. –

+0

복잡한 디코딩 소프트웨어를 사용하지 않고도 비디오 파일에서 픽셀 데이터를 쉽게 얻을 수있는 프로그램을 작성할 수 없다는 점을 지적했습니다. 일단 프레임이 디코드되면 비트 맵을 사용하는 것과 똑같은 처리가 이루어 지므로 그 시점에서 원시 RGB 이미지 데이터로 변환했기 때문에 사실입니다. –

+0

감사합니다. Maurizio (다시)와 Jason이 제안합니다. Jason 저는 다음에 대한 당신의 의견을 알고 싶습니다. MPEG는 jpeg와 같은 압축 된 형식입니다. 압축되지 않은 원시 형식의 비디오 형식 (BMP 이미지 라인)이 있습니까? 비디오 디코더를 피하고 싶습니다. 또한, 다음 문장을 통해 내가 옳았는지 잘못되었는지 알려주십시오. RAW 비디오 형식에는 디코더가 필요하지 않습니다. – HaggarTheHorrible

관련 문제