2016-11-07 722 views
0

我需要在頂部和底部垂直填充矩陣。在C++中使用零矩陣的矩陣與OpenCV mat的串聯

但這個代碼失敗的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?

回答

2

您可以使用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()); 
+0

如果太: :padding = Mat :: zeros(...),padding.empty()== true。 – empty

+0

請顯示實際的代碼。這沒有多大意義 – Miki

+0

Mat padding = Mat :: zeros(dataMat.rows,dataMat.cols,datumMat.type()); if(padding.empty()){cout <<「true」; }//這打印真實。 – empty