博客
关于我
opencv9-膨胀和腐蚀
阅读量:800 次
发布时间:2023-02-23

本文共 1666 字,大约阅读时间需要 5 分钟。

OpenCV 膨胀与腐蚀操作

膨胀和腐蚀是图像处理中的常见操作,常用于边缘检测和形状变化分析。以下是基于OpenCV的C++代码示例,展示了如何实现这些操作。

代码结构说明

#include 
#include
#include
#include
using namespace std;using namespace cv;

导入必要的库

  • opencv2/opencv.hpp:OpenCV库的核心头文件,包含基本图像处理功能。
  • opencv2/highgui/highgui.hpp:高级用户界面功能,用于创建和管理图像窗口。
  • iostream:标准输入输出流,用于打印文本信息。
  • math.h:用于数学函数,包括随机数生成和基本运算。

函数定义

void CallBack_Demo(int, void*);

主函数

int main(){    src = imread("E:\\vs2015\\opencvstudy\\3.jpg", 1);    if (src.empty()){        cout << "could not load the src image!" << endl;        return -1;    }    char *input_title = "input Image";    imshow(input_title, src);    namedWindow(output_title, 1);    createTrackbar("Size:", output_title, &element_size, max_size, CallBack_Demo);    CallBack_Demo(0, 0);    waitKey(0);    return 0;}

回调函数

void CallBack_Demo(int, void*){    int s = element_size * 2 + 1;    Mat structureElement = getStructuringElement(MORPH_RECT, Size(s,s), Point(-1, -1));    dilate(src, dst_dilate, structureElement, Point(-1, -1), 1);    //erode(src, dst_erode, structureElement, Point(-1, -1), 1);    imshow(output_title, dst_dilate);    //imshow(output_title, dst_erode);    return;}

代码解释

  • 导入库:首先导入了必要的OpenCV库和标准库,确保程序能够正常编译和运行。

  • 读取图像:使用imread函数读取图像文件,图像以灰度格式加载。

  • 创建窗口:使用imshow函数创建输入图像窗口,并设置输出图像窗口。

  • 创建滑动条:使用createTrackbar函数创建滑动条,用户可以通过滑动条调整膨胀/腐蚀的尺寸。

  • 回调函数:当滑动条调整时,回调函数被调用,执行膨胀操作。使用getStructuringElement创建结构元素,dilate函数进行膨胀操作。

  • 膨胀与腐蚀的原理

    • 膨胀:膨胀操作会使图像中的每个像素扩展成更大的区域,用于增强图像的边缘。膨胀的核心原理是求最大值,即白色部分增多。

    • 腐蚀:腐蚀操作会使图像中的每个像素收缩成更小的区域,通常用于去除图像中的小噪声。腐蚀的核心原理是求最小值,即黑色部分增多。

    参数说明

    • element_size:结构元素的大小,决定了膨胀/腐蚀的程度。值越大,效果越明显。
    • max_size:结构元素的最大值,确保结构元素的合理范围。

    通过调整这些参数,可以在图像中实现不同的膨胀和腐蚀效果。

    转载地址:http://gmsfk.baihongyu.com/

    你可能感兴趣的文章
    org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
    查看>>
    org.springframework.boot:spring boot maven plugin丢失---SpringCloud Alibaba_若依微服务框架改造_--工作笔记012
    查看>>
    SQL-CLR 类型映射 (LINQ to SQL)
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
    查看>>
    org.tinygroup.serviceprocessor-服务处理器
    查看>>
    org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
    查看>>
    org/hibernate/validator/internal/engine
    查看>>
    Orleans框架------基于Actor模型生成分布式Id
    查看>>
    SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
    查看>>
    ORM sqlachemy学习
    查看>>
    Ormlite数据库
    查看>>
    orm总结
    查看>>
    ORM框架 和 面向对象编程
    查看>>
    OS X Yosemite中VMware Fusion实验环境的虚拟机文件位置备忘
    查看>>
    os.environ 没有设置环境变量
    查看>>
    os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
    查看>>
    os.removexattr 的 Python 文档——‘*‘(星号)参数是什么意思?
    查看>>
    os.system 在 Python 中不起作用
    查看>>