2012-07-31 9 views
11

¿Cómo rellenar una matriz (cv::Mat) con ceros en OpenCV?matriz de matriz con ceros- abrirCV

+0

¿qué quiere decir con relleno en este contexto? – juanchopanza

+0

@juanchopanza Me refiero a hacer una matriz más grande con ceros alrededor de la matriz original. –

+0

¿No puedes hacer una matriz llena de ceros y luego llenar el bloque relevante con datos de la matriz más pequeña? – juanchopanza

Respuesta

12

Aquí es una manera de hacerlo

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

Gracias. funciona. –

+0

Necesita cambiar entre las filas y cols en el 'Rect'. Esta es la declaración de función 'Rect _ (_ Tp _x, _Tp _y, _Tp _width, _Tp _height)' – ifryed

+0

@ifryed: corregido – foundry

22

Una otra forma de almohadilla de una imagen es utilizar copyMakeBorder función:

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

A continuación, rellenando con ceros es simplemente como la

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

Finalmente, aquí está el tutorial de Adding borders to your images.

Cuestiones relacionadas