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

欢迎关注我,一起交流!

相关推荐
今儿敲了吗12 小时前
CO——CPU
笔记
今儿敲了吗12 小时前
Python ——第三方包
笔记·python
吃着火锅x唱着歌13 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习
落知秋13 小时前
RUST中的trait是什么?
笔记·rust
xian_wwq14 小时前
【学习笔记】Prompt Engineering 没死,只是它不再够用了-2/16
笔记·学习·prompt
≮傷£≯√14 小时前
Opencv VideoCapture
qt·opencv
210Brian15 小时前
STM32学习笔记(五)EXTI外部中断(上)
笔记·stm32·学习
xian_wwq16 小时前
【学习笔记】RAG 只是 Context Engineering 的一小块-5/16
笔记·学习·rag
iCxhust17 小时前
8088单板机VScode集成开发环境使用方法
ide·笔记·vscode·编辑器·微机原理·8088单板机
文人sec17 小时前
MySQL事务与索引做了什么?
android·笔记·mysql