2012-07-31 11 views
11

Come eseguire il pad di un array (cv::Mat) con zeri in OpenCV?Matrice di pad con zeri apertiCV

+0

cosa intendi per padding in questo contesto? – juanchopanza

+0

@juanchopanza Voglio dire creare un array più grande con zero attorno alla matrice originale. –

+0

Non è possibile creare un array pieno di zeri, quindi riempire il blocco pertinente con i dati dell'array più piccolo? – juanchopanza

risposta

12

Qui è un modo per farlo

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

Grazie. Funziona. –

+0

È necessario passare tra le righe e le colonne in 'Rect'. Questa è la dichiarazione della funzione 'Rect _ (_ Tp _x, _Tp _y, _Tp _width, _Tightightight)' – ifryed

+0

@ifryed: corretto – foundry

22

Un altro modo per riempire un'immagine è usare copyMakeBorder funzione:

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

Poi imbottitura con zeri è semplicemente così

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

Infine, ecco il tutorial di Adding borders to your images.