1图像显示
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat Image = imread("F:\\1.jpg"); //读取图片内容
imshow("显示图片", Image); //将图片输出出去
waitKey(6000);
return 0;
}
2图像腐蚀
腐蚀是提取的是内核覆盖下的相素最小值。背景变细,黑色区域变大。进行 腐蚀 操作的函数是 erode 它接受了三个参数:
src: 原图像
erosion_dst: 输出图像
element: 腐蚀操作的内核。 如果不指定,默认为一个简单的 3x3 矩阵。否则,我们就要明确指定它的形状,可以使用函数 getStructuringElement:
Mat element = getStructuringElement( erosion_type,
Size( 2erosion_size + 1, 2erosion_size+1 ),
Point( erosion_size, erosion_size ) );
我们可以为我们的内核选择三种形状之一:
矩形: MORPH_RECT
交叉形: MORPH_CROSS
椭圆形: MORPH_ELLIPSE
然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat image = imread("F:\\1.jpg");
imshow("原始图片", image);
//进行腐蚀操作
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(image, dstImage, element);
imshow("【效果图】腐蚀操作", dstImage);
waitKey(60000);
return 0;
}
3均值滤波
消除使用归一化图像框过滤器。使用内核函数方法消除图像:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main()
{
//【1】载入原始图
Mat srcImage = imread("F:\\1.jpg");
//【2】显示原始图
imshow("【原图】", srcImage);
//【3】进行均值滤波操作
Mat dstImage;
blur(srcImage, dstImage, Size(7, 7));
imshow("均值滤波", dstImage);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
erode(srcImage, dstImage, element);
imshow("腐蚀操作", dstImage);
waitKey(600000);
}
4CANNY边缘检测
Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法, 最优边缘检测的三个主要评价标准是:
低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。
高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近。
最小响应: 图像中的边缘只能标识一次
1、消除噪声。 使用高斯平滑滤波器卷积降噪。 显示了一个 size = 5 的高斯内核示例:
2、计算梯度幅值和方向。 此处,按照Sobel滤波器的步骤:
(1)运用一对卷积阵列 (分别作用于 x 和 y 方向):
(2)使用下列公式计算梯度幅值和方向:
梯度方向近似到四个可能角度之一(一般 0, 45, 90, 135)
3、非极大值 抑制。 这一步排除非边缘像素, 仅仅保留了一些细线条(候选边缘)。
4、滞后阈值: 最后一步,Canny 使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值):
(1)如果某一像素位置的幅值超过 高 阈值, 该像素被保留为边缘像素。
(2)如果某一像素位置的幅值小于 低 阈值, 该像素被排除。
( 3)如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于 高 阈值的像素时被保留。
Canny 推荐的 高:低 阈值比在 2:1 到3:1之间。
#include <opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main()
{
//【0】载入原始图
Mat srcImage = imread("F:\\2.jpg");
imshow("【原始图】", srcImage); //显示原始图
Mat dstImage, edge, grayImage; //参数定义
//【1】创建与src同类型和大小的矩阵(dst)
dstImage.create(srcImage.size(), srcImage.type());
//【2】将原图像转换为灰度图像
//此句代码的OpenCV2版为:
cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
//【3】先用使用 3x3内核来降噪
blur(grayImage, edge, Size(3, 3));
//【4】运行Canny算子
Canny(edge, edge, 3, 9, 3);
//【5】显示效果图
imshow("【效果图】Canny边缘检测", edge);
waitKey(0);
return 0;
}