我在C++中使用opencv,我有一個對象的二進制圖像(圖像1)。因爲我使用Zhang-Suen算法(圖2)獲得了對象的骨架,並且在頂部,左側和右側添加了像素,因此我們需要在頂部,左側,右側和下部添加像素(圖像3)正確,然後我修復了圖像2中可見的錯誤,我如何在邊緣上添加5個像素?如何使用opencv在圖像上添加邊緣?
我想轉換到此搜索的Image3。
我在C++中使用opencv,我有一個對象的二進制圖像(圖像1)。因爲我使用Zhang-Suen算法(圖2)獲得了對象的骨架,並且在頂部,左側和右側添加了像素,因此我們需要在頂部,左側,右側和下部添加像素(圖像3)正確,然後我修復了圖像2中可見的錯誤,我如何在邊緣上添加5個像素?如何使用opencv在圖像上添加邊緣?
我想轉換到此搜索的Image3。
輸入圖像:
// 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);
輸出圖像:
這種技術已先前described here一直。
只是完美的解決方案! – user3779874
使用以下方法可以輕鬆獲得相同的輸出。
void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar())
的示例性實現可以OpenCV的文檔here
我不使用下,在下蟒找到++但是,在OpenCV中,該圖像是隻是數字的陣列。添加邊框與向數組添加行或列是一回事。它使用正常的數組操作完成。很可能,在C++下的OpenCV的行爲是相似的。 – John1024