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

欢迎关注我,一起交流!

相关推荐
xin007hoyo20 分钟前
算法笔记.约数个数
数据结构·笔记·算法
star_and_sun27 分钟前
SQL笔记——左连接、右连接、内连接
数据库·笔记·sql
钰宸y31 分钟前
ModuleNotFoundError: No module named ‘triton‘
图像处理·深度学习·kan·kat
笑鸿的学习笔记38 分钟前
虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅
笔记·ue5·虚幻
寻丶幽风1 小时前
论文阅读笔记——STDArm
论文阅读·笔记·机器人·具身智能·动态推理
爱地球的曲奇2 小时前
【ArcGISPro学习笔记】布局输出时图例总是有省略号怎么办?
笔记·学习·gis
s_little_monster2 小时前
【Linux】网络基础
linux·运维·网络·笔记·学习·php·学习方法
xrgs_shz2 小时前
签名去背景图像处理实例
图像处理·人工智能
IsPrisoner2 小时前
GoLang基础(续)
笔记·golang
njsgcs3 小时前
chili3d笔记11 连接yolo python http.server 跨域请求 flask
笔记·yolo