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

fak*_*unt 6 c++ opencv mat

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

Mat1.copyTo(newMat);
Mat2.copyTo(newMat);
Run Code Online (Sandbox Code Playgroud)

但这似乎只是覆盖了之前的内容Mat.

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

mcc*_*chu 28

这取决于你想要添加什么.例如,您有两个3x3 Mat:

cv::Mat matA(3, 3, CV_8UC1, cv::Scalar(20));
cv::Mat matB(3, 3, CV_8UC1, cv::Scalar(80));
Run Code Online (Sandbox Code Playgroud)

您可以使用矩阵操作添加matAmatB使用值为100的新3x3 Mat :

auto matC = matA + matB;
Run Code Online (Sandbox Code Playgroud)

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

cv::Mat matD;
cv::add(matA, matB, matD);
Run Code Online (Sandbox Code Playgroud)

甚至使用cv :: addWeighted 混合两个图像:

cv::Mat matE;
cv::addWeighted(matA, 1.0, matB, 1.0, 0.0, matE);
Run Code Online (Sandbox Code Playgroud)

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

cv::Mat matF;
matF.push_back(matA);
matF.push_back(matB);
Run Code Online (Sandbox Code Playgroud)

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

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

想想你要添加的内容并选择合适的功能.


zed*_*edv 6

你可以使用push_back():

newMat.push_back(Mat1);
newMat.push_back(Mat2);
Run Code Online (Sandbox Code Playgroud)