边缘检测算法的C++实现

基于sobel算子的边缘检测算法的C++实现及改进

姓名: 何宇杰 学号:2019212009

实验内容

  1. 对已有的sobel算子边缘检测算法的学习
  2. 对已有算法进行C++实现
  3. 对已有算法进行改进

已有的边缘检测算法流程

  1. 对图像进行灰度化得到灰度图像
  2. 对灰度图像进行高斯模糊去除部分噪声
  3. 利用sobel算子作为卷积核对图像进行卷积,计算梯度
  4. 用非最大值抑制法进行边缘细化
  5. 利用双阈值进行噪声去除

算法实现

图像灰度化

cv::Mat Graying(cv::Mat img) {
    int row = img.rows;
    int col = img.cols;
  //  cv::imshow("灰度图", img);
    cv::Mat grayImg = Mat(row, col, CV_8U);
    cout << row << '\n' << col;
    for(register int i = 0; i < row; ++i) {
        Vec3b *p = img.ptr<Vec3b>(i);
        uchar *p2 = grayImg.ptr<uchar>(i);
        for(register int j = 0; j <=col; ++j) {
            *p2 = (*p)[0] * 0.114 + (*p)[1] * 0.587 + (*p)[2] * 0.299;
            //Gray = 0.2989*R+0.5870*G+0.1140*B 注意opencv的Mat类型是BGR顺序
            p2++;
            p++;
        }
    }
    return grayImg;
}

原始图片
灰度图片

猜你喜欢

转载自www.cnblogs.com/thhyj/p/12054705.html