首页 > 编程语言 > 详细

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

时间:2019-12-17 15:30:29      阅读:457      评论:0      收藏:0      [点我收藏+]

基于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;
}

技术分享图片
技术分享图片

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

原文:https://www.cnblogs.com/thhyj/p/12054705.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!