我需要在顶部和底部用零垂直填充矩阵。
但此代码因 CV_Assert 而失败,因为填充是“空的”,用零填充:
cv::Mat dataMat;
//...
cv::Mat padding(dataMat.rows, dataMat.cols, datumMat.type(), 0);
std::vector<cv::Mat> matrices;
matrices.push_back(padding);
matrices.push_back(dataMat);
matrices.push_back(padding);
cv::Mat resultMat;
cv::vconcat(matrices, resultMat);
有没有一种方法可以使用 vconcat 来填充零矩阵,或者我是否必须复制粘贴并破解 vconcat?
最佳答案
您可以使用 copyMakeBorder
:
int top_padding = 3;
int bottom_padding = 3;
copyMakeBorder(dataMat, dataMat, top_padding, bottom_padding, 0, 0, BORDER_CONSTANT, Scalar(0,0,0,0));
如果你想在编译时不知道类型的情况下对矩阵进行零初始化,你应该使用 zeros
:
Mat padding = Mat::zeros(dataMat.rows, dataMat.cols, datumMat.type());
关于c++ - OpenCV 矩阵与 C++ 中的零矩阵的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472215/