OpenCv实战笔记(2)基于opencv和qt对图像进行灰度化 → 降噪 → 边缘检测预处理及显示

一、实现效果

二、应用场景

这三步是经典的 "灰度化 → 降噪 → 边缘检测" 预处理流程,常用于:

计算机视觉任务(如物体识别、特征提取)。

图像分析(如文档扫描、车牌识别)。

减少后续算法的计算复杂度(灰度+模糊能显著提升性能)。

三、参考代码

cpp 复制代码
//函数封装
cv::Mat convertToGray(const cv::Mat& src) {
    cv::Mat gray;
    if (src.channels() == 3)
        cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
    else
        gray = src.clone();
    return gray;
} 
cv::Mat applyGaussianBlur(const cv::Mat& src, int kernelSize) {
    cv::Mat blurred;
    cv::GaussianBlur(src, blurred, cv::Size(kernelSize, kernelSize), 0);
    return blurred;
} 
cv::Mat detectEdges(const cv::Mat& src, double lowThreshold, double highThreshold) {
    cv::Mat gray = convertToGray(src);
    cv::Mat edges;
    cv::Canny(gray, edges, lowThreshold, highThreshold);
    return edges;
}
//函数使用
void MainWindow::sltLoadImage()
{
    QString fileName = QFileDialog::getOpenFileName(this, "Open Image", "", "Images (*.png *.jpg *.bmp)");
    if (fileName.isEmpty()) return;

    qDebug() << "fileName=>" << fileName;

    // 原始图像读取
    cv::Mat src = cv::imread(fileName.toStdString());
    if (src.empty()) {
        QMessageBox::warning(this, "Error", "Failed to load image.");
        return;
    }

    // 图像处理流程
    cv::Mat gray = image_processing::convertToGray(src);
    cv::Mat blurred = image_processing::applyGaussianBlur(gray);
    cv::Mat edges = image_processing::detectEdges(blurred);

    // 显示边缘检测图像(转为 RGB 后显示)daija
    cv::Mat edgeRgb;
    cv::cvtColor(edges, edgeRgb, cv::COLOR_GRAY2RGB);

    QImage qimg(edgeRgb.data, edgeRgb.cols, edgeRgb.rows, edgeRgb.step, QImage::Format_RGB888);
    ui->labelImage->setPixmap(QPixmap::fromImage(qimg).scaled(ui->labelImage->size(), Qt::KeepAspectRatio));
}

欢迎关注我,一起交流!

相关推荐
新子y1 小时前
【小白笔记】区分类方法/实例方法和静态函数/命名空间函数
笔记·分类
钱彬 (Qian Bin)2 小时前
项目实践4—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
人工智能·qt·fastapi
钱彬 (Qian Bin)2 小时前
项目实践3—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
人工智能·qt·fastapi
梁辰兴2 小时前
企业培训笔记:外卖平台后端--套餐管理模块--新建套餐信息
笔记·vue·mybatis·springboot·外卖管理系统
degen_2 小时前
第一次进入 PEICORE 流程
c语言·笔记
YJlio2 小时前
Process Monitor 学习笔记(5.24):工具栏参考与高效快捷键指南
笔记·学习·php
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 核心语法 笔记39
spring boot·笔记·后端·thymeleaf
张人玉3 小时前
WPF 常用样式属性及示例笔记
笔记·wpf
周杰伦_Jay3 小时前
【MCP开发部署流程表格分析】MCP架构解析、开发流程、部署方案、安全性分析
人工智能·深度学习·opencv·机器学习·架构·transformer
sali-tec4 小时前
C# 基于halcon的视觉工作流-章49-网面破损
开发语言·图像处理·算法·计算机视觉·c#