基于sobel算子的边缘检测算法的C++实现及改进
姓名: 何宇杰 学号:2019212009
实验内容
- 对已有的sobel算子边缘检测算法的学习
- 对已有算法进行C++实现
- 对已有算法进行改进
已有的边缘检测算法流程
- 对图像进行灰度化得到灰度图像
- 对灰度图像进行高斯模糊去除部分噪声
- 利用sobel算子作为卷积核对图像进行卷积,计算梯度
- 用非最大值抑制法进行边缘细化
- 利用双阈值进行噪声去除
算法实现
图像灰度化
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;
}