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

欢迎关注我,一起交流!

相关推荐
CVer儿5 小时前
qt资料2025
开发语言·qt
山烛5 小时前
OpenCV:图像直方图
人工智能·opencv·计算机视觉·图像直方图
荼蘼5 小时前
OpenCV 发票识别全流程:透视变换与轮廓检测详解
人工智能·opencv·计算机视觉
mahuifa7 小时前
OpenCV 开发 -- 图像阈值处理
人工智能·opencv·计算机视觉
闲人编程7 小时前
图像去雾算法:从物理模型到深度学习实现
图像处理·人工智能·python·深度学习·算法·计算机视觉·去雾
zyx没烦恼8 小时前
Qt 基础编程核心知识点全解析:含 Hello World 实现、对象树、坐标系及开发工具使用
开发语言·qt
mkhase8 小时前
9.11-QT-QT的基本使用
开发语言·qt
离越词8 小时前
QTday1作业
c++·qt
码农客栈8 小时前
qt QLineSeries详解
qt
lingggggaaaa9 小时前
小迪安全v2023学习笔记(八十一讲)—— 框架安全&ThinkPHP&Laravel&Struts2&SpringBoot&CVE复现
笔记·学习·struts·安全·网络安全·laravel