图像变换
一、边缘检测
1:边缘检测 Canny
cpp
cv::Mat iamgeCan;
cv::Canny(image, iamgeCan, 3, 9, 3);
cv::imshow("Canny", iamgeCan);
cpp
/// 边缘检测高级用法 Canny用法
cv::Mat dst, edge, gray;
dst.create(image.size(), image.type());
/// 图像转灰度图像
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
/// 用3*3内核降噪
cv::blur(gray, edge, cv::Size(3, 3));
/// 运行canny算子
cv::Canny(edge, edge, 3, 9, 3);
/// dst所有元素设置0
dst = cv::Scalar::all(0);
image.copyTo(dst, edge);
cv::imshow("Canny1", dst);
2:边缘检测 Sobel用法
cpp
cv::Mat grad_x, grad_y;
cv::Mat abs_grad_x, abs_grad_y, dst;
/// 求x方向梯度
cv::Sobel(image, grad_x, CV_16S, 1, 0, 3, 1, 1, cv::BORDER_DEFAULT);
cv::convertScaleAbs(grad_x, abs_grad_x);
cv::imshow("abs_grad_x", abs_grad_x);
/// 求Y方向梯度
cv::Sobel(image, grad_y, CV_16S, 0, 1, 3, 1, 1, cv::BORDER_DEFAULT);
cv::convertScaleAbs(grad_x, abs_grad_y);
cv::imshow("abs_grad_y", abs_grad_y);
/// 合并方向梯度
cv::addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
cv::imshow("dst", dst);
3:边缘检测 Laplacian用法
cpp
cv::Mat src_gray, dst, abs_dst;
/// 用高斯滤波消除噪声
cv::GaussianBlur(image, image, cv::Size(3,3), 0, 0, cv::BORDER_DEFAULT);
/// 转换为灰度图
cv::cvtColor(image, src_gray, cv::COLOR_BGR2GRAY);
/// Laplacian
cv::Laplacian(src_gray, dst, CV_16S, 3, 1, 0, cv::BORDER_DEFAULT);
/// 计算绝对值
cv::convertScaleAbs(dst, abs_dst);
cv::imshow("abs_dst", abs_dst);
4:边缘检测 Scharr滤波器用法
cpp
cv::Mat grad_x, grad_y;
cv::Mat abs_grad_x, abs_grad_y, dst;
/// 求x方向梯度
cv::Scharr(image, grad_x, CV_16S, 1, 0, 1, 0, cv::BORDER_DEFAULT);
cv::convertScaleAbs(grad_x, abs_grad_x);
cv::imshow("abs_grad_x", abs_grad_x);
/// 求Y方向梯度
cv::Scharr(image, grad_y, CV_16S, 0, 1, 1, 0, cv::BORDER_DEFAULT);
cv::convertScaleAbs(grad_x, abs_grad_y);
cv::imshow("abs_grad_y", abs_grad_y);
/// 合并方向梯度
cv::addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
cv::imshow("dst", dst);
好了,后面学习下霍夫变换