将2个Mats的内容添加到另一个Mat opencv c++
Add the contents of 2 Mats to another Mat opencv c++
我只想将 2 个不同 Mat
的内容添加到另外 1 个 Mat
。我试过了:
Mat1.copyTo(newMat);
Mat2.copyTo(newMat);
但这似乎只是覆盖了 Mat
的先前内容。
这可能是一个简单的问题,但我迷路了。
您可以使用 push_back():
newMat.push_back(Mat1);
newMat.push_back(Mat2);
这取决于您想要添加的内容。例如,你有两个 3x3 的垫子:
cv::Mat matA(3, 3, CV_8UC1, cv::Scalar(20));
cv::Mat matB(3, 3, CV_8UC1, cv::Scalar(80));
您可以使用 matrix operation 将 matA
和 matB
添加到值为 100 的新 3x3 垫子:
auto matC = matA + matB;
或者使用数组操作cv::add来做同样的工作:
cv::Mat matD;
cv::add(matA, matB, matD);
甚至 mixing two images using cv::addWeighted:
cv::Mat matE;
cv::addWeighted(matA, 1.0, matB, 1.0, 0.0, matE);
有时您需要合并两个垫子,例如使用 cv::Mat::push_back:
创建一个 3x6 垫子
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);
想想你要添加什么,然后选择一个合适的功能。
我只想将 2 个不同 Mat
的内容添加到另外 1 个 Mat
。我试过了:
Mat1.copyTo(newMat);
Mat2.copyTo(newMat);
但这似乎只是覆盖了 Mat
的先前内容。
这可能是一个简单的问题,但我迷路了。
您可以使用 push_back():
newMat.push_back(Mat1);
newMat.push_back(Mat2);
这取决于您想要添加的内容。例如,你有两个 3x3 的垫子:
cv::Mat matA(3, 3, CV_8UC1, cv::Scalar(20));
cv::Mat matB(3, 3, CV_8UC1, cv::Scalar(80));
您可以使用 matrix operation 将 matA
和 matB
添加到值为 100 的新 3x3 垫子:
auto matC = matA + matB;
或者使用数组操作cv::add来做同样的工作:
cv::Mat matD;
cv::add(matA, matB, matD);
甚至 mixing two images using cv::addWeighted:
cv::Mat matE;
cv::addWeighted(matA, 1.0, matB, 1.0, 0.0, matE);
有时您需要合并两个垫子,例如使用 cv::Mat::push_back:
创建一个 3x6 垫子cv::Mat matF;
matF.push_back(matA);
matF.push_back(matB);
甚至使用 cv::merge:
合并成一个双通道 3x3 Matauto channels = std::vector<cv::Mat>{matA, matB};
cv::Mat matG;
cv::merge(channels, matG);
想想你要添加什么,然后选择一个合适的功能。