OpenCV2学习笔记(三):形态学及边缘角点检测

本文介绍OpenCV2中形态学滤波的原理和应用,包括腐蚀、膨胀、开闭运算,并探讨边缘检测和角点检测的方法。通过实例展示了形态学在图像处理中的效果,以及如何通过调整结构元素进行边缘和角点强化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形态学滤波理论于上世纪90年代提出,目前被广泛用于分析及处理离散图像。其基本运算有4个: 膨胀、腐蚀、开启和闭合, 它们在二值图像和灰度图像中各有特点。基于这些基本运算还可推导和组合成各种数学形态学实用算法,用它们可以进行图像形状和结构的分析及处理,包括图像分割、特征抽取、边缘检测、 图像滤波、图像增强和恢复等。数学形态学方法利用一个称作结构元素的“探针”收集图像的信息,当探针在图像中不断移动时, 便可考察图像各个部分之间的相互关系,从而了解图像的结构特征。数学形态学基于探测的思想,与人的FOA(Focus Of Attention)的视觉特点有类似之处。其中最重要的结构元素,可直接携带知识(形态、大小、甚至加入灰度和色度信息)来探测、研究图像的结构特点。鉴于研究所需,记录一些知识点,开发平台为OpenCV2.4.9+Qt5.3.2。

一:图像腐蚀、膨胀和开闭运算

这些运算的基本公式和原理参考:http://blog.youkuaiyun.com/liyuefeilong/article/details/43374777
图像的腐蚀:替换为当前像素位像素集合中的最小像素值,函数为cv::erode
图像的膨胀:替换为当前像素位像素集合中的最大像素值,函数为cv::dilate
图像的开运算:先腐蚀后膨胀,函数为cv::morphologyEx,对应的参数为MORPH_CLOSE
图像的闭运算:先膨胀后腐蚀,函数为cv::morphologyEx,对应的参数为MORPH_OPEN
如morphologyEx(image, opened, cv::MORPH_OPEN, element2, cv::Point(-1,-1), 1); 中,输入图像为image,输出图像为opened,执行开操作,结构元素为element2,原点参数cv::Point(-1,-1)表示原点位于矩阵的中心(默认),最后的1则表示对图像的操作次数(注:对一幅图像多次使用开操作和闭操作时效果不会有改善,这些运算是等幂的)。形态学滤波本是基于二值图像上,但以上这些运算同样适用于灰度图像。

新建一个Qt控制台应用,创建一个类:MorphoFeatures:

#ifndef MORPHOFEATURES_H
#define MORPHOFEATURES_H
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

class MorphoFeatures
{
   
   

public:
    void fourFunctions(cv::Mat &image); // 腐蚀、膨胀、开操作、闭操作

}

#endif // MORPHOFEATURES_H
void MorphoFeatures::fourFunctions(cv::Mat &image)
{
    // 腐蚀运算,替换为当前像素位像素集合中的最小像素值
    cv::Mat eroded;
    cv::erode(image, eroded, cv::Mat());
    // 膨胀运算,替换为当前像素位像素集合中的最大像素值
    cv::Mat dilated;
    cv::dilate(image, dilated, cv::Mat());
    // 闭运算,先膨胀后腐蚀
    cv::Mat closed;
    cv::Mat element1(3, 3, CV_8U, cv::Scalar(1));
    cv::morphologyEx(image,             // 输入图像
                     closed,            // 输出图像
                     cv::MORPH_CLOSE,   // 指定操作
                     element1,          // 结构元素设置
                     cv::Point(-1,-1),  // 操作的位置
                     1);                // 操作的次数
    //开运算,先腐蚀后膨胀
    cv::Mat opened;
    cv::Mat 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值