将2 Mats的内容添加到另一个Mat opencv c ++中

时间:2015-02-18 17:32:06

标签: c++ opencv mat

我只想将2个不同的Mat s的内容添加到另外1个Mat。我试过了:

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

但这似乎覆盖了Mat的先前内容。

这可能是一个简单的问题,但我迷失了。

2 个答案:

答案 0 :(得分:23)

这取决于你想要添加的内容。例如,您有两个3x3 Mat:

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

您可以使用matrix operationmatAmatB添加到值为100的新3x3相册中:

auto matC = matA + matB;

或者使用执行相同工作的数组操作cv::add

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

甚至mixing使用cv::addWeighted的两张图片:

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

有时您需要合并两个Mat,例如使用cv::Mat::push_back创建一个3x6 Mat:

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

甚至使用cv::merge合并为双通道3x3 Mat:

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

考虑要添加的内容并选择合适的功能。

答案 1 :(得分:6)

您可以使用push_back():

newMat.push_back(Mat1);
newMat.push_back(Mat2);