OpenCV なら Mat クラスに copyTo
というメソッドがあると思うのですが, Python からだと使えない感じなんですか?
(私は Python から OpenCV 使ったことないので,そこらへんの事情とかわかりませんが)
仮に上記が使えないのだとしても,あなたが示した参考先を見た感じだと bitwise_and
とかは普通に使えるのでしょうから,そういうのを用いて都合が良い処理を組み立てるのではダメなのですか?
Wikipedia でも説明あるみたいですが.
[追記]
とりあえず copyTo
のサンプルを示しておく.C++だが.
※やりたいことは単にこういう話ではないのか? と読んだのだが,違うのだろうか?
違うならば,他者からの的確な回答を得るためにはその旨が明確になるよう質問文の内容を考えた方が良いのでは.
C++
1int main()
2{
3 //背景画像
4 cv::Mat BkImg( 200, 160, CV_8UC3 );
5 for( int x=0; x<BkImg.cols; ++x )
6 {//※真っ白とかだと話が分かり難い様子なので,適当な模様を描画しておく
7 unsigned char R = (unsigned char)( 128 + 120 * cos( x*0.05 ) );
8 unsigned char B = 255 - R;
9 cv::line( BkImg, cv::Point(x,0), cv::Point(x,BkImg.rows), cv::Scalar(B,0,R) );
10 }
11 cv::imshow( "BkImg", BkImg );
12
13 //前景画像
14 cv::Mat ForeImg( 120, 100, CV_8UC3 );
15 for( int y=0; y<ForeImg.rows; ++y )
16 {//※適当に背景とは異なる模様を描画している
17 unsigned char G = (unsigned char)( 128 + 120 * cos( y*0.1 ) );
18 unsigned char R = 255 - G;
19 unsigned char B = R / 2;
20 cv::line( ForeImg, cv::Point(0,y), cv::Point(ForeImg.cols,y), cv::Scalar(B,G,R) );
21 }
22 cv::imshow( "ForeImg", ForeImg );
23
24 //マスク.前景画像と同じサイズ.適当にドーナツ型を描画してある
25 cv::Mat Mask = cv::Mat::zeros( ForeImg.size(), CV_8U );
26 cv::circle( Mask, cv::Point( Mask.cols/2, Mask.rows/2 ), Mask.rows/3, cv::Scalar(255), -1 );
27 cv::circle( Mask, cv::Point( Mask.cols/2, Mask.rows/2 ), Mask.rows/8, cv::Scalar(0), -1 );
28 cv::imshow( "Mask", Mask );
29
30 //前景画像のうち,マスクが白い範囲だけを背景画像上に描画する
31 ForeImg.copyTo(
32 BkImg( cv::Rect( 0,0, ForeImg.cols, ForeImg.rows ) ), //描画対象には前景画像と同じサイズの部分領域を指定する
33 Mask
34 );
35 cv::imshow( "Result", BkImg );
36 cv::waitKey(0);
37 return 0;
38}
背景画像:

前景画像:

マスク:

copyTo
の結果:

bit演算でやるにしても数行書けば良い(やり方はいくつかあるだろうが,以下のコードではリンクで示したwikipediaの手順にしてある).
(マスクを3chなデータで作るのがダサい感)
C++
1//前景画像のうち,マスクが白い範囲だけを背景画像上に描画する
2{//※ただしここでは Mask は 8UC3 である
3 cv::Mat TgtReg = BkImg( cv::Rect( 0,0, ForeImg.cols, ForeImg.rows ) );
4 cv::bitwise_and( TgtReg, ~Mask, TgtReg );
5
6 cv::Mat Extracted;
7 ForeImg.copyTo( Extracted, Mask );
8 cv::bitwise_or( TgtReg, Extracted, TgtReg );
9}