OpenCV4入门系列教程32:图像梯度

索引地址:系列教程索引地址

上一篇:OpenCV4入门系列教程测试3:腐蚀膨胀开闭顶帽黑帽综合操作实例

梯度

数学梯度:是一个向量,由一组正交的方向导数组成,表示函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化最大。

对图像梯度而言,图像上亮度变化值大的地方(也就是图像边缘部分)表示有较大梯度值的地方。

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//--------------------------------------【程序说明】-------------------------------------------
// 程序说明:《OpenCV3编程入门》OpenCV3版书本配套示例程序45
// 程序描述:用morphologyEx进行形态学梯度运算
// 2014年11月 Created by @浅墨_毛星云
// 2014年12月 Revised by @浅墨_毛星云
//----------------------------------------------------------------------------------------------

//---------------------------------【头文件、命名空间包含部分】----------------------------
// 描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;

//-----------------------------------【main( )函数】------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main() {
//载入原始图
Mat image = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图
//显示原始图
imshow("Original", image);
//定义核
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
//进行形态学操作
morphologyEx(image, image, MORPH_GRADIENT, element);
//显示效果图
imshow("Result", image);

waitKey(0);

return 0;
}

效果如图:

gradient

可以看出像素变化不太大的地方几乎为黑色,而变化大的地方先白色。可以考虑用来进行边缘检测。

下一篇:OpenCV4入门系列教程33:击中和击不中