문제

나는 EMGUCV를 사용하고 있으며 Aforge .NET 's와 유사한 필터를 만들기 위해 2 개의 이미지를 빼려고합니다. 앞으로 움직이다 필터.

이것이 위의 URL에서 약간 수정 된 버전이 시도하는 것입니다. 2 개의 이미지, 소스 및 오버레이가 주어지면 소스 이미지를 오버레이로 천천히 움직입니다. 다음을 기반으로합니다.

result = source + movementFactor * (overlay - source);

그 결과, 소스와 오버레이는 이미지이며 MovementFactor는 범위 0에서 1의 변화 속도입니다.

MovementFactor가 1과 동일한 코드에서 이것을 시도했을 때 결과는 엉망인 것처럼 보였습니다 (모션 트레일과 같은 것이 있음). 더 테스트하기 위해 위의 방정식에서 MovementFactor를 제거하고 결과 = 소스 + 오버레이 - 소스를 만들었습니다. 나는 오버레이 이미지를 결과적으로 볼 것으로 예상했지만, 그 결과, 깜박이는 이미지의 한 영역과 함께.

첨가/뺄셈이 발생할 때 픽셀 강도가 상부 또는 하한에서 잘린 것으로 생각합니다.

나는 이것으로 내가 원하는 것을 성취 할 수있다 :

for (int i = 0; i < src.Height; i++)
{
    for (int j = 0; j < src.Width; j++)
    {
        res[i, j] = new Gray(src[i, j].Intensity + movementFactor * (ovr[i, j].Intensity - src[i, j].Intensity));
    }
}

그러나 이것은 처리가 크게 느려집니다. 추가/뺄셈 문제 또는 위의 속도 문제를 어떻게 극복 할 수 있습니까? 답변 해주셔서 감사합니다!

도움이 되었습니까?

해결책

누군가가 나중에 같은 문제를 겪을 경우를 대비하여 여기에 찾은 답변을 게시하겠습니다.

이것이 당신이하는 방법입니다.

Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result);

출처 : Emgucv의 포럼, 여기에 있습니다 게시하다 그것은 나에게 답장을 주었다

다른 팁

누군가가 나중에 같은 문제를 겪을 경우를 대비하여 여기에 찾은 답변을 게시하겠습니다.

이것이 당신이하는 방법입니다.

Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result); 

출처 : Emgucv의 포럼, 다음은 나에게 답장을 준 게시물입니다.

더 깨끗한 구문이 있습니다.

var result = frame.AddWeighted(1.0 - movementFactor, overlay, movementFactor, 0.0);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top