如何使用opencv在图像上添加边缘?
Posted
技术标签:
【中文标题】如何使用opencv在图像上添加边缘?【英文标题】:How add edges on image with opencv? 【发布时间】:2014-07-02 20:35:19 【问题描述】:我在 c++ 中使用 opencv,并且我有一个带有一个对象的二进制图像(图像 1)。
我想在图像的顶部、左侧、右侧和底部添加像素(图 3),因为我使用张素算法(图 2)得到对象的骨架,并在顶部、左侧、右侧添加像素,然后我修复了图 2 中可见的错误,如何在边缘添加 5 px??。
我想将 image1 转换为 image3。
【问题讨论】:
我不使用 c++ 但是,在 python 下的 OpenCV 中,图像只是一个数字数组。添加边框与向数组中添加行或列是一样的。它是使用正常的数组操作完成的。很可能,OpenCV 在 c++ 下的行为是相似的。 【参考方案1】:输入图片:
// 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。
【讨论】:
简直是完美的解决方案!!【参考方案2】:使用以下方法可以很容易地获得相同的输出。
void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )
示例实现可以在opencv文档here中找到
【讨论】:
以上是关于如何使用opencv在图像上添加边缘?的主要内容,如果未能解决你的问题,请参考以下文章