1

背景の単色を抽出し、JavaCV でその場で画像に置き換える最適な方法を探しています。たとえば、ピクセルごとに読み取り、色が緑色の場合はそれを置き換える非常に簡単な方法を書きました。これは非常に遅く、いくつかのスレッドに分割しても動作が劇的に遅くなります。これはライブで行う必要があるため、他の方法を見つける必要があります。おそらく、背景を置き換えた後に透かしを追加する必要があるので、アプリケーションは非常に高速でなければなりません.

正しい方法を見つけるのを手伝ってくれる人はいますか? 私はそれを行う他の方法を見つけるために一日中費やしていますが..私が見つけたすべての例はうまくいかないか、私のニーズにそれらを採用する方法がわからないかもしれません.

この男 ( http://www.youtube.com/watch?v=WOEuE3D88b0 ) は、ピクセル単位で読み取っていると書いています。私のMacBook Pro 2.5 i5では動作しません:(

私はあなたの例を使用しましたが、完全に混合したと思います。動いている自分のマスク (黒地に白) が見えます。CvCopy を使用すると、白い点がある場所に背景が表示されます。残念ながら、彼は要求された結果ではありませんが、私はそれに非常に近いに違いないと思います;)私は私を離れて、すべての静的オブジェクトを交換する必要があります. 私のコードを調べていただけますか?

private static final IplImage back = cvLoadImage("/Users/user/app/eclipse/JavaCV/resources/1.png", CV_LOAD_IMAGE_COLOR);

private static BackgroundSubtractorMOG2 bgs = new BackgroundSubtractorMOG2(30,16,false);

public static IplImage replacePixels2(IplImage img){
IplImage frame = cvCloneImage(img); 
//bgs.getBackgroundImage(frame);
IplImage image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U,1);
bgs.apply(frame, image, -1);


IplROI roi = new IplROI();
roi.xOffset(0);
roi.yOffset(0);
roi.width(frame.width());
roi.height(frame.height());


IplImage backImageWithRoi = frame.roi(roi);


cvCopy(back, backImageWithRoi, image );

    return backImageWithRoi;
}

私もgrabCutを試しましたが、これは非常に遅く、ライブでストリームを変更する際には使用できません:(

宜しくお願いします。

4

1 に答える 1

1

JavaCV は OpenCV へのインターフェースであるため、 Grabcut セグメンテーションを実行できる必要があります。

ここでも答えたように。

于 2013-08-17T19:27:05.783 に答える