【opencv】教程代码 —ImgProc (4) Hit or Miss形态学操作

4. HitMiss.cpp Hit or Miss形态学操作

kernel

cpp 复制代码
#include <opencv2/core.hpp> // 引入opencv库,用于处理序列和算子等基本数据结构
#include <opencv2/imgproc.hpp> // 引入opencv库,用于图片处理,包含图像过滤,几何转换,颜色转换等
#include <opencv2/highgui.hpp> // 引入opencv库,用于图像界面展示,存储以及鼠标交互等操作


using namespace cv; // 利用cv命名空间,减少代码量


int main(){ 
    // 创建一个8x8的矩阵,并初始化数据
    Mat input_image = (Mat_<uchar>(8, 8) << 
        0, 0, 0, 0, 0, 0, 0, 0,
        0, 255, 255, 255, 0, 0, 0, 255,
        0, 255, 255, 255, 0, 0, 0, 0,
        0, 255, 255, 255, 0, 255, 0, 0,
        0, 0, 255, 0, 0, 0, 0, 0,
        0, 0, 255, 0, 0, 255, 255, 0,
        0, 255, 0, 255, 0, 0, 255, 0,
        0, 255, 255, 255, 0, 0, 0, 0);


    // 创建一个3x3的矩阵,作为形态学操作的结构元素
    Mat kernel = (Mat_<int>(3, 3) <<
        0, 1, 0,
        1, -1, 1,
        0, 1, 0);


    Mat output_image; // 创建一个Mat对象,用来存储结果
    morphologyEx(input_image, output_image, MORPH_HITMISS, kernel); // 执行形态学操作


    const int rate = 50; 
    kernel = (kernel + 1) * 127; // 把kernel值调整到合理的显示范围内
    kernel.convertTo(kernel, CV_8U); // 将kernel的数据类型转换为8位无符号整数类型


    resize(kernel, kernel, Size(), rate, rate, INTER_NEAREST); // 缩放kernel,以显示在窗口上
    imshow("kernel", kernel); // 展示kernel结果
    moveWindow("kernel", 0, 0); // 移动window到指定位置


    resize(input_image, input_image, Size(), rate, rate, INTER_NEAREST); // 缩放input_image,以显示在窗口上
    imshow("Original", input_image); // 展示原始图片
    moveWindow("Original", 0, 200); //移动window到指定位置


    resize(output_image, output_image, Size(), rate, rate, INTER_NEAREST); // 缩放output_image,以显示在窗口上
    imshow("Hit or Miss", output_image); // 展示处理后的图片
    moveWindow("Hit or Miss", 500, 200); //移动window到指定位置


    waitKey(0); // 等待用户动作
    return 0; // 结束主函数
}

创建一个输入图像,并对其应用Hit-or-Miss转换(一种特定的形态学运算类型)。形态学操作的结果存储在另一图像中,并随后显示在屏幕上。代码还展示了如何创建用于形态学转换的核心,并显示原始和转换后的图像,以便比较。此程序的核心是**morphologyEx函数** ,它实现了形态学转换。这是一种处理数字图像和进行图像分析的基础工具,在计算机视觉和图像处理中非常常见。例如,可以用于移除图像中的噪声、执行图像分割,或者找出图像中的亮区域等。

相关推荐
爱喝白开水a1 分钟前
春节后普通程序员如何“丝滑”跨行AI:不啃算法,也能拿走AI
java·人工智能·算法·spring·ai·前端框架·大模型
两万五千个小时10 分钟前
解析 OpenClaw AgentSkills:AI Agent 如何通过「技能包」实现专业化
人工智能·程序员·代码规范
热点速递13 分钟前
美团2025年“翻车”实录:从盈利王者到赤字领跑!
人工智能·业界资讯
社恐的下水道蟑螂13 分钟前
从奶茶店彻底搞懂 SSR!从零到拿捏服务端渲染,看完面试吹牛逼不卡壳
前端·react.js·性能优化
ai产品老杨17 分钟前
异构计算时代的架构突围:基于 Docker 的 AI 视频平台如何实现 X86/ARM 与 GPU/NPU 全兼容(源码交付)
人工智能·docker·架构
EnCi Zheng18 分钟前
M1-如何转换为HTML
前端·html
beyond阿亮19 分钟前
OpenClaw在Windows上接入飞书完整指南
人工智能·windows·ai·openclaw
ybdesire19 分钟前
通过训练代码来理解DLLM扩散语言模型
人工智能·语言模型·自然语言处理
多年小白19 分钟前
Anthropic发布Mythos模型:为什么网络安全板块先跌为敬
网络·人工智能·科技·ai编程
爱丽_21 分钟前
多因素最优解到梯度下降:AI 训练的数学主线
人工智能