web-dev-qa-db-ja.com

2つのマットの内容を別のマットopencvc ++に追加します

2つの異なるMatsの内容を他の1つのMatに追加したいだけです。私は試した:

Mat1.copyTo(newMat);
Mat2.copyTo(newMat);

しかし、それはMatの以前の内容を上書きしているように見えました。

これは簡単な質問かもしれませんが、私は迷子になっています。

6
fakeaccount

それはあなたが何をしたいかによりますadd。たとえば、2つの3x3マットがあります。

cv::Mat matA(3, 3, CV_8UC1, cv::Scalar(20));
cv::Mat matB(3, 3, CV_8UC1, cv::Scalar(80));

行列演算 を使用して、値100の新しい3x3マットにmatAmatBを追加できます。

auto matC = matA + matB;

または、配列操作を使用する cv :: add 同じ仕事をします:

cv::Mat matD;
cv::add(matA, matB, matD);

または mixing 2つの画像を使用して cv :: addWeighted

cv::Mat matE;
cv::addWeighted(matA, 1.0, matB, 1.0, 0.0, matE);

2つのマットをマージする必要がある場合があります。たとえば、 cv :: Mat :: Push_back :を使用して3x6マットを作成します。

cv::Mat matF;
matF.Push_back(matA);
matF.Push_back(matB);

cv :: merge :を使用して2チャンネルの3x3マットにマージすることもできます。

auto channels = std::vector<cv::Mat>{matA, matB};
cv::Mat matG;
cv::merge(channels, matG);

追加したいものを考えて、適切な機能を選択してください。

28
mcchu

Push_back()を使用できます。

newMat.Push_back(Mat1);
newMat.Push_back(Mat2);
6
zedv