2014-07-02 95 views
2

我在C++中使用opencv,我有一個對象的二進制圖像(圖像1)。因爲我使用Zhang-Suen算法(圖2)獲得了對象的骨架,並且在頂部,左側和右側添加了像素,因此我們需要在頂部,左側,右側和下部添加像素(圖像3)正確,然後我修復了圖像2中可見的錯誤,我如何在邊緣上添加5個像素?如何使用opencv在圖像上添加邊緣?

imagen

我想轉換到此搜索的Image3。

+0

我不使用下,在下蟒找到++但是,在OpenCV中,該圖像是隻是數字的陣列。添加邊框與向數組添加行或列是一回事。它使用正常的數組操作完成。很可能,在C++下的OpenCV的行爲是相似的。 – John1024

回答

2

輸入圖像:

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); 

輸出圖像:

enter image description here

這種技術已先前described here一直。

+0

只是完美的解決方案! – user3779874

2

使用以下方法可以輕鬆獲得相同的輸出。

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

的示例性實現可以OpenCV的文檔here