opencv-dilate膨胀
使用一个指定的核元素去膨胀一个图像,图像膨胀的过程类似于一个卷积的过程,源图像矩阵A 以及结构元素B,B在A矩阵上依次移动,每个位置上B所覆盖元素的最大值替换B的中心位置值(即锚点处),完成整个膨胀的过程
注意:所谓的腐蚀与膨胀的对象是针对图像中的白色元素所说的
算法通俗理解:膨胀算法使图像扩大一圈,给图像中的对象边界添加像素,其运算过程就是用3X3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为0,结构图像的该像素为0,否则为1。结果就是使二值图像扩大一圈
函数使用一个指定的核元素去膨胀源图像,内核有一个可定义的 锚点,我们叫他内核中心点,膨胀操作时,获取内核覆盖区域最大像素值,并代替锚点的像素,最大值通过以下公式获取:
函数支持就地模式,膨胀操作可以迭加使用多次,在多通道图像的情况下,每个通道独立处理
#include<opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src= cv::imread("D:/bb/tu/1.jpg"); cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); cv::Mat dst; cv::dilate(src, dst, element); /* 参数1:src輸入圖,可以多通道,深度可為CV_8U、CV_16U、CV_16S、CV_32F或CV_64F 参数2:dst:輸出圖,和輸入圖尺寸、型態相同 参数3:kernel:結構元素,如果kernel=Mat()則為預設的3×3矩形,可以使用getStructuringElement() 参数4:anchor:原點位置,預設為結構元素的中央 参数5:iterations:執行次數,預設為1次,執行越多次侵蝕效果越明顯 */ cv::imshow("src", src); cv::imshow("dst", dst); cv::waitKey(0); return 0; }
白色部分膨胀了,其它部分缩小了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)