一、实现效果
二、应用场景
这三步是经典的 "灰度化 → 降噪 → 边缘检测" 预处理流程,常用于:
计算机视觉任务(如物体识别、特征提取)。
图像分析(如文档扫描、车牌识别)。
减少后续算法的计算复杂度(灰度+模糊能显著提升性能)。
三、参考代码
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));
}
欢迎关注我,一起交流!