2012-07-31 132 views
11

如何用OpenCV中的零填充數組(cv::Mat)?用零填充陣列openCV

+0

你在這種情況下填充什麼意思? – juanchopanza 2012-07-31 10:15:23

+0

@juanchopanza我的意思是用原始數組周圍的零來創建一個更大的數組。 – 2012-07-31 10:18:51

+0

難道你不能讓一個數組充滿零,然後用小數組中的數據填充相關塊嗎? – juanchopanza 2012-07-31 10:21:34

回答

12

這裏是一個辦法做到這一點

cv::Mat img(100, 100, CV_8UC3); 
cv::Mat padded; 
int padding = 3; 
padded.create(img.rows + 2*padding, img.cols + 2*padding, img.type()); 
padded.setTo(cv::Scalar::all(0)); 

img.copyTo(padded(Rect(padding, padding, img.cols, img.rows))); 
+0

謝謝。有用。 – 2012-08-02 07:31:41

+0

您需要在'Rect'中的行和列之間切換。這是函數聲明'Rect _(_ Tp _x,_Tp _y,_Tp _width,_Tp _height)' – ifryed 2016-01-12 12:44:38

+0

@ifryed:corrected – foundry 2016-01-14 18:06:21

22

的另一種方式來墊的圖像是使用copyMakeBorder功能:

C++: void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar()) 

然後用0填充簡直就像

Mat image,image_pad; 
copyMakeBorder(image,image_pad,1,1,1,1,BORDER_CONSTANT,Scalar(0)); 

最後,這裏是Adding borders to your images的教程。