如何使用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在图像上添加边缘?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCV 将梯度/幅度应用于图像?

如何利用opencv实现彩色图像边缘检测算法

如何针对低分辨率/模糊素材优化 OpenCV 的 Canny 边缘检测

opencv如何读取多边形区域内的像素值?

OpenCV基础(11)基于OpenCV的边缘检测

#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现边缘检测