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));
}

欢迎关注我,一起交流!

相关推荐
Vincent_Zhang2336 分钟前
专题:所有状语类型(持续补充)
笔记
wdfk_prog11 分钟前
[Linux]学习笔记系列 -- [fs]buffer
linux·笔记·学习
海奥华231 分钟前
进程调度算法 笔记总结
linux·运维·服务器·笔记·学习
再__努力1点1 小时前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉
即将进化成人机1 小时前
验证码生成 + Redis 暂存 + JWT 认证
数据库·redis·笔记
小灰灰搞电子1 小时前
Qt 开发环境选择Qt Creator、Visual Studio还是 VS Code?
开发语言·qt·visual studio
Coding茶水间2 小时前
基于深度学习的草莓健康度检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
c#上位机2 小时前
halcon窗口显示文字
图像处理·c#·halcon
山顶听风3 小时前
缠中说禅学习笔记
笔记·金融
橙河网络3 小时前
橙河网络:国外问卷调查答题全过程
经验分享·笔记·课程设计