当前位置: 首页 > article >正文

C++:opencv生成结构元素用于膨胀腐蚀等cv::getStructuringElement

cv::getStructuringElement 是 OpenCV 库中用于生成结构元素的函数。结构元素在形态学操作中(如膨胀、腐蚀、开运算、闭运算等)扮演着关键角色。这个函数可以创建不同形状和尺寸的结构元素,以适应不同的图像处理需求。

函数原型

cv::Mat cv::getStructuringElement(int shape, cv::Size ksize, cv::Point anchor = cv::Point(-1, -1))

参数说明

  1. shape: 结构元素的形状,以下是常用的选项:

    • cv::MORPH_RECT (0): 矩形形状。
    • cv::MORPH_ELLIPSE (1): 椭圆形状。
    • cv::MORPH_CROSS (2): 十字形状。
  2. ksize: 结构元素的尺寸,指定为 cv::Size 对象。例如,cv::Size(5, 5) 表示一个 5x5 像素的结构元素。可以认为是矩形、椭圆、十字的最小外接矩形,形状内的值均为1.

  3. anchor: 锚点位置,通常是结构元素的中心点。默认值是 cv::Point(-1, -1),表示自动选择结构元素的中心作为锚点。如果指定了锚点位置,它将改变形态学操作中的对称位置。

返回值

返回一个 cv::Mat 类型的矩阵,表示生成的结构元素。矩阵中的元素值通常是 1,表示结构元素的有效区域,而其他区域的值为 0

示例

以下是如何使用 cv::getStructuringElement 生成不同形状的结构元素的示例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 创建一个5x5的矩形结构元素
    cv::Mat rectElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
    std::cout << "Rectangular Structuring Element:" << std::endl;
    std::cout << rectElement << std::endl;

    // 创建一个5x5的椭圆形结构元素
    cv::Mat ellipseElement = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5));
    std::cout << "Elliptical Structuring Element:" << std::endl;
    std::cout << ellipseElement << std::endl;

    // 创建一个5x5的十字形结构元素
    cv::Mat crossElement = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(5, 5));
    std::cout << "Cross-shaped Structuring Element:" << std::endl;
    std::cout << crossElement << std::endl;

    return 0;
}

输出解释

  • 矩形结构元素 (cv::MORPH_RECT):

[1, 1, 1, 1, 1;
 1, 1, 1, 1, 1;
 1, 1, 1, 1, 1;
 1, 1, 1, 1, 1;
 1, 1, 1, 1, 1]

这是一个 5x5 的矩形矩阵,所有元素都是 1

  • 椭圆形结构元素 (cv::MORPH_ELLIPSE):

[0, 0, 1, 0, 0;
 0, 1, 1, 1, 0;
 1, 1, 1, 1, 1;
 0, 1, 1, 1, 0;
 0, 0, 1, 0, 0]

这是一个 5x5 的矩形框内的最大椭圆形状,1 表示椭圆区域,0 是矩形框但不在椭圆内的区域。

  • 十字形结构元素 (cv::MORPH_CROSS):
[0, 0, 1, 0, 0;
 0, 0, 1, 0, 0;
 1, 1, 1, 1, 1;
 0, 0, 1, 0, 0;
 0, 0, 1, 0, 0]

这是一个 5x5 的矩形框内的十字形状,1 表示十字的区域,0 是矩形框但不在十字内的区域。

使用场景

  • 形态学操作: 结构元素用于图像处理中的形态学操作,如腐蚀(erode)、膨胀(dilate)、开运算(open)、闭运算(close)等。
  • 形状匹配: 选择合适的结构元素形状可以帮助在特定的图像处理中得到更好的效果,例如用矩形结构元素处理规则网格图案,或用椭圆形处理自然形状。

总结

cv::getStructuringElement 是一个功能强大的函数,可以生成用于各种图像处理任务的结构元素。通过选择不同的形状和尺寸,你可以创建适合特定应用需求的结构元素,从而实现高效和准确的图像处理。


http://www.kler.cn/news/305010.html

相关文章:

  • 中级练习[6]:Hive SQL订单配送与用户社交行为分析
  • Windows 环境下安装、使用、nodeJs 连接 TiDB 数据库
  • 使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • 外观模式详解:如何为复杂系统构建简洁的接口
  • UE4_后期处理六—夜视仪、扫描线
  • 瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法
  • 如何提升RAG检索的准确率及答案的完整性?
  • Qt与Udp
  • git update-ref
  • 网络安全 DVWA通关指南 DVWA SQL Injection (Blind SQL盲注)
  • 【iOS】单例模式
  • 使用 PyTorch 构建 MNIST 手写数字识别模型
  • 基于单片机的水情监测站设计
  • TDengine 与飞腾腾锐 D2000 完成兼容互认证,推动国产软硬件深度融合
  • 【方法】如何禁止PDF转换成其他格式文件?
  • Dfa还原某app白盒aes秘钥
  • 微信小程序读写NFC标签(实现NFC标签快速拉起小程序)实战
  • 项目:构建高可用、负载均衡的高效Web服务器
  • 「Qt Widget中文示例指南」如何实现一个系统托盘图标?(二)
  • AndroidManifest.xml文件的重要信息
  • 【YashanDB知识库】archivelog磁盘满导致数据库abnormal
  • 哈莫尼斯 手工王国 Harmonis the hand made kingdoms,官方中文,解压即玩,
  • Java【泛型】
  • Oracle实现行转换成列
  • 【用Java学习数据结构系列】用堆实现优先级队列
  • R 绘图 - 饼图
  • 2024_中秋国庆双节来临 祝CSDN所有开发者与网站节日快乐
  • python画图|极坐标下的3D surface
  • 全局代理与智能分流:哪个更适合你?
  • Docker绑定端口后仍无法远程直接访问