Q&A

  • video에서 컷 나누기를 알고파요!
자동으로 컷 나누기를 하려합니다.



그런데 이전 프레임과 현프레임을 어떻게 비교하면

컷이 전환되는 것을 알 수 있을까요?



예를 들어 이전의 bmp와 현 bmp를 어떻게 비교해야 속도도 빠르고

비교적 정확하게 나눌 수 있는지 알고 싶습니다.



일일이 점 하나하나 비교하기에는 문제가 많아서요!



그럼 좋은 식견을 부탁드립니다.



그리고 이에 관련된 사이트를 알려 주시면 고맙고요!

2  COMMENTS
  • Profile
    김영석 2000.12.20 02:08
    일단 기본적인 소스는 아래와 같습니다.

    그런데 PRGBTripleArray 타입선언된곳을 찾지를 못하네요.

    Graphics.Pas 에 있는 타입인데 uses 에 그걸 포함시켜도 선언되지 않은 변수라고

    나오는데 그거 어떻게 해결하는지 알려주시면 좋겠습니다.

    일단 소스는 아래처럼..



    / P1, P2 에는 그림이 256 컬러 이하의 팔레트를 사용한다면

    // PByteArray 를 주고 TrueColor 이라면 PRGBTripleArray 를 사용한다..

    procedure TForm1.Button1Click(Sender: TObject);

    var

    x,y : Integer;

    BitMap1, Bitmap2 : TBitMap;

    P1, P2 : PRGBTripleArray; // PByteArray.. (256 컬러라면..)

    DifferentBmp: Boolean;

    begin

    DifferentBmp:=false;

    BitMap1 := TBitMap.create;

    try

    BitMap1.LoadFromFile('c:Windows설치.bmp');

    Bitmap2:=TBitmap.Create;

    Bitmap2.LoadFromFile('c:Windows설치.bmp');

    if (Bitmap2.Width<>Bitmap1.Width) or

    (Bitmap2.Height<>Bitmap1.Height) then

    DifferentBmp:=true;



    try

    for y := 0 to BitMap1.height -1 do

    begin

    P1 := BitMap1.ScanLine[y];

    P2 := Bitmap2.ScanLine[y];



    for x:=0 to Bitmap1.Width-1 do

    if (P1^[x].rgbtBlue<>p2^[x].rgbtBlue) or

    (P1^[x].rgbtRed<>P2^[x].rgbtRed) or

    (P1^[x].rgbtGreen<>p2^[x].rgbtGreen) then DifferentBmp:=true;

    end;



    finally

    Bitmap2.Free;

    end;

    finally

    BitMap1.free;

    end;



    if DifferentBmp then

    ShowMessage(' 다른 이미지..') else

    ShowMessage(' 같은 이미지..');

    end;





    치토스 wrote:

    > 자동으로 컷 나누기를 하려합니다.

    >

    > 그런데 이전 프레임과 현프레임을 어떻게 비교하면

    > 컷이 전환되는 것을 알 수 있을까요?

    >

    > 예를 들어 이전의 bmp와 현 bmp를 어떻게 비교해야 속도도 빠르고

    > 비교적 정확하게 나눌 수 있는지 알고 싶습니다.

    >

    > 일일이 점 하나하나 비교하기에는 문제가 많아서요!

    >

    > 그럼 좋은 식견을 부탁드립니다.

    >

    > 그리고 이에 관련된 사이트를 알려 주시면 고맙고요!

  • Profile
    치토스 2000.12.28 21:25
    아래 소스는 단순비교네요!

    저는 동영상에서 비슷한것과 아닌것 차이를 알려고하는 건데!!

    제가 알고 있는 것은 칼러 히스토그램이나 모자이크화비교등을

    알고 있는데 이것 외에 획기적인 방법이 있는가 하고 말여요!

    위의 방법은 느린것 같아서....





    김영석 wrote:

    > 일단 기본적인 소스는 아래와 같습니다.

    > 그런데 PRGBTripleArray 타입선언된곳을 찾지를 못하네요.

    > Graphics.Pas 에 있는 타입인데 uses 에 그걸 포함시켜도 선언되지 않은 변수라고

    > 나오는데 그거 어떻게 해결하는지 알려주시면 좋겠습니다.

    > 일단 소스는 아래처럼..

    >

    > / P1, P2 에는 그림이 256 컬러 이하의 팔레트를 사용한다면

    > // PByteArray 를 주고 TrueColor 이라면 PRGBTripleArray 를 사용한다..

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > x,y : Integer;

    > BitMap1, Bitmap2 : TBitMap;

    > P1, P2 : PRGBTripleArray; // PByteArray.. (256 컬러라면..)

    > DifferentBmp: Boolean;

    > begin

    > DifferentBmp:=false;

    > BitMap1 := TBitMap.create;

    > try

    > BitMap1.LoadFromFile('c:Windows설치.bmp');

    > Bitmap2:=TBitmap.Create;

    > Bitmap2.LoadFromFile('c:Windows설치.bmp');

    > if (Bitmap2.Width<>Bitmap1.Width) or

    > (Bitmap2.Height<>Bitmap1.Height) then

    > DifferentBmp:=true;

    >

    > try

    > for y := 0 to BitMap1.height -1 do

    > begin

    > P1 := BitMap1.ScanLine[y];

    > P2 := Bitmap2.ScanLine[y];

    >

    > for x:=0 to Bitmap1.Width-1 do

    > if (P1^[x].rgbtBlue<>p2^[x].rgbtBlue) or

    > (P1^[x].rgbtRed<>P2^[x].rgbtRed) or

    > (P1^[x].rgbtGreen<>p2^[x].rgbtGreen) then DifferentBmp:=true;

    > end;

    >

    > finally

    > Bitmap2.Free;

    > end;

    > finally

    > BitMap1.free;

    > end;

    >

    > if DifferentBmp then

    > ShowMessage(' 다른 이미지..') else

    > ShowMessage(' 같은 이미지..');

    > end;

    >

    >

    > 치토스 wrote:

    > > 자동으로 컷 나누기를 하려합니다.

    > >

    > > 그런데 이전 프레임과 현프레임을 어떻게 비교하면

    > > 컷이 전환되는 것을 알 수 있을까요?

    > >

    > > 예를 들어 이전의 bmp와 현 bmp를 어떻게 비교해야 속도도 빠르고

    > > 비교적 정확하게 나눌 수 있는지 알고 싶습니다.

    > >

    > > 일일이 점 하나하나 비교하기에는 문제가 많아서요!

    > >

    > > 그럼 좋은 식견을 부탁드립니다.

    > >

    > > 그리고 이에 관련된 사이트를 알려 주시면 고맙고요!