Matは単純にイコール記号でコピーを作ることができません。以下のようなコードで完全なコピーを作成できます。
#include "opencv/cv.h"
#include "opencv/highgui.h"
int main(){
Mat img1;
Mat img2;
:
:
:
img2=img1.clone();
:
:
}
cv::Matを代入演算子でコピーすると,浅いコピー(shallow copy)が行われ,コピー元とコピー先とcv::Matでデータが共有されます.この場合,最も大きいメンバであるデータ自身が実際にはコピーされないので,cv::Matのコピー動作はサイズに依存せず高速に行われます.それぞれのcv::Matのdataポインタは,同じメモリアドレスを指すので,コピー元cv::Matのデータを書き換えると,コピー先cv::Matのデータも変わることになります.
コピー元とコピー先を別データとしてコピーするには,clone()メソッドを利用して,深いコピー(deep copy)を行います. clone()メソッド内部では,新たなcv::Matが作成され,そこにcopyTo()メソッドでデータ全体がコピーされます.
[opencv.jp より]