2014-07-02 3 views
2

J'utilise opencv en C++, et j'ai une image binaire avec un objet (image 1). Je veux ajouter des pixels en haut, à gauche, à droite et en bas de l'image (image 3), car j'obtiens le squelette de l'objet avec l'algorithme de Zhang-Suen (image 2), et j'ajoute les pixels en haut, à gauche, à droite, et en bas je répare l'erreur visible dans l'image 2, comment puis-je ajouter le 5 px sur les bords ??Comment ajouter des bords sur l'image avec opencv?

imagen

je veux convertir image1 à image3.

+0

Je n'utilise C++ mais, dans OpenCV sous python, l'image est juste un tableau de nombres. Ajouter des bordures revient à ajouter des lignes ou des colonnes au tableau. C'est fait en utilisant des manipulations de tableau normales. Selon toute vraisemblance, le comportement d'OpenCV sous C++ est similaire. – John1024

Répondre

2

entrée l'image:

enter image description here

// Load input image 
cv::Mat input = cv::imread("zero.png"); 
if (input.empty()) 
{ 
    std::cout << "!!! Failed imread\n"; 
    return -1; 
} 

// Create a larger output image to store the end result 
cv::Mat output(input.rows+10, input.cols+10, input.type(), cv::Scalar(0)); 

// Specify the size of the copy and its offset 
cv::Rect offset_rect = cv::Rect(5, 5, input.cols, input.rows); 

// Copy to the output Mat 
input.copyTo(output(offset_rect)); 

//cv::imwrite("output.png", output); 

sortie l'image:

enter image description here

Cette technique a été précédemment described here.

+0

simplement la solution parfaite !! – user3779874

2

La même sortie peut être facilement obtenue en utilisant la méthode suivante.

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

Un exemple d'implémentation se trouvent dans la documentation OpenCV here

Questions connexes