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

欢迎关注我,一起交流!

相关推荐
飞浪纪元[FWC–FE]15 分钟前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
sbjdhjd9 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
小徐不徐说11 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
小王C语言11 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
TMedical12 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
海绵宝宝的月光宝盒13 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
白山编程大哥14 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛1392462567314 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
小李不想当小白14 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
chari克里14 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt