캡쳐 된 (웹캠에서) OpenCV 이미지 또는 해당 플로트 배열의 배열을 업 샘플링하고 싶습니다 (픽셀 값은 정수가 아니어도됩니다). 불행히도 업 샘플링 비율은 항상 정수가 아니므로 간단한 선형 보간법을 사용하여이를 수행하는 방법을 알지 못합니다. 이 작업을 수행하는 더 쉬운 방법이나 라이브러리가 있습니까?C/C++로 비디오 업 샘플링
답변
글쎄, 나는 프레임 레이트 스케일링을 할 라이브러리를 모른다.
그러나 나는 스스로에게 가장 적절한 방법은 프레임을 떨어 뜨리거나 두 배로 만드는 것이라고 말할 수 있습니다.
간단한 선형 픽셀 보간법으로 사진을 혼합해도 화질은 향상되지 않지만 재생은 여전히 선명하지 않고 흐릿하게 보입니다.
적절한 보간 프레임 속도에 훨씬 더 복잡한 알고리즘이 필요합니다. 현대 TV는 예를 들어 비디오 편집 소프트웨어 용 하드웨어로 제작되었습니다. After Effects에는 이러한 기능이 있습니다.
이러한 알고리즘은 모션 분석을 통해 그림 사이에 생성 할 수 있습니다. 그러나 이것은 작은 문제 해결의 범위를 넘어서고 있습니다.
따라서 기존의 라이브러리를 검색하거나 프레임을 두 번/두 번 사용하여 검색 할 수 있습니다.
Dropping/doubling frames은 매우 못 생겼습니다. VFR에서 CFR로 변환 된 잘못 인코딩 된 애니메이션을 많이 보았습니다. 그러나 실제로는 간단한 구현을 허용하는 유일한 솔루션입니다. 다른 모든 것들은 고급 동작 분석이 필요하며 매우 느립니다. –
저는 비디오 캡처에 100 % 익숙하지 않기 때문에 "픽셀 값이 정수형 일 필요는 없습니다"라는 것이 무슨 뜻인지 잘 모르겠습니다. 이것은 픽셀 당 색상 정보가 정수가 아닐 수도 있다는 것을 의미합니까?
"업 샘플링 비율은 항상 정수가 아닙니다"라고 가정 할 때, 한 해상도에서 다른 해상도로 업 샘플링하지만 두 배 또는 세배로 늘리지 않을 수도 있습니다. 예를 들어, 640x480 -> 1280x960 대신 640x480 -> 800x600과 같이 작업 할 수 있습니다.
간단한 알고리즘 결과 : (높이에 의한 폭에 의해 분할 x, y)에 각각 X/Y 값이 0.1 사이 거짓말 큰 격자
- 스케일의 화소
- 스케일은 작은 격자의 폭/높이에 의해 X/Y 값 -> xSmaller, ySmaller는
- 오기 부동 소수점 바닥/천장 함수를 통해, 사용자의 포인트를 포함하는 4 개 개의 화소를 결정 그 사각형 안에있는 점의 x/y 값
0,1 (바닥/천장 값 xSmaller, ySmaller 빼기) -> xInterp, yInterp - 검정색으로 시작하여 각
에 대한 xInterp/yInterp 요인 당신은 픽셀 매핑 조회 테이블을 만들어이 빠르게 여러 프레임을 만들 수 있습니다 -> xInterp/yInterp는
내가 거기보다 훨씬 더 나은 알고리즘 있는지가하고 값 선형 보간 (쌍 선형 등). 이것은 프로세서 수준에서 최적화하고 싶은 종류의 것 같습니다.
ImageMagick MagickWand 라이브러리는 적절한 필터링 알고리즘을 사용하여 이미지의 크기를 조정합니다. MagickResizeImage()
기능을 참조하십시오 (Sinc 필터 사용).
ffmpeg 프로젝트의 libswscale
을 사용하십시오. 가장 최적화되어 있으며 다양한 리샘플링 알고리즘을 지원합니다.
프레임 속도 리샘플링이 확실합니까? 그렇다면 작은 예제에 대한 링크를 제공 할 수 있습니까? 튜토리얼이나 의사를 찾기가 어려웠습니다. –
아, 프레임 속도 재 샘플링? 내가 잘못 읽고 공간 리샘플링을 의미한다고 생각했습니다. Framerate 리샘플링은 비디오가 항상 시간 방향으로 심각하게 언더 샘플링되어 앨리어싱되므로 어떤 순진한 선형 필터를 사용할 수 없으므로 매우 어려운 문제입니다. 기본적으로 모션 추정과 모션 벡터 보간에 필요한 것이 필요합니다. 그물에 어딘가에 괜찮은 구현이 있다는 것을 기억하지만, 불행히도 어디서 무엇을 부르는 지 기억하지 못합니다. :(당신이 그것을 찾는 데 도움이되는 것이 무엇인지에 대한 나의 설명이되기를 바랍니다. –
공간 해상도 (즉, 픽셀 단위로 각 프레임의 너비와 높이) 또는 색상 해상도, 즉 각 픽셀의 색상을 나타내는 데 사용되는 비트 수를 변경 하시겠습니까? – unwind
아니요, 이미지 크기 조정/리샘플링을 의미하지는 않습니다. 프레임 속도를 의미합니다. 10 초짜리 캡쳐가 끝날 때 160 프레임이 있고 200 프레임이 있어야한다고 상상해보십시오 (웬일인지). 캡처 속도는 항상 같지 않으므로 일부 동적 알고리즘을 작성해야합니다. –