0

この関数を使用して、OpenCVを使用してオーバーレイ画像を配置しました。

void OverlayImage(IplImage* src, IplImage* overlay, CvPoint location, CvScalar S, CvScalar D) {
for (int i = location.y; i < (location.y + overlay->height); i++) {
    for (int j = location.x; j < (location.x + overlay->width); j++) {
        CvScalar source = cvGet2D(src, i, j);
        CvScalar over   = cvGet2D(overlay, i-location.y, j-location.x);
        CvScalar merged;

        for(int i = 0; i < 4; i++)
            merged.val[i] = (S.val[i] * source.val[i] + D.val[i] * over.val[i]);

        cvSet2D(src, i + location.y, j + location.x, merged);
    }
}
}

そして、このような関数を使用しました-

OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(0,0,0,0), cvScalar(1,1,1,1)); 

のようなオーバーレイ画像を非表示にするため image1

OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(1,1,1,1), cvScalar(0,0,0,0)); 

表示用 image2

私がそれらの関数を使用した方法は次のとおりです。

if (frame_number < 400)
    OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(1,1,1,1), cvScalar(0,0,0,0));
else 
    OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(0,0,0,0), cvScalar(1,1,1,1));

しかし、最初の画像にはゆがんだ領域があります。ビデオの400フレーム後にその画像が消えるようにしたいのです。その領域を明確にするにはどうすればよいですか?

助けてください!

4

1 に答える 1

0

オーバーレイなしで画像のコピーを作成し、オーバーレイされた画像を表示したくない場合は、代わりにコピーを表示できます。

于 2013-02-21T21:35:03.673 に答える