OpenCV常用基本处理函数(6)图像梯度

形态学转换

腐蚀

img = cv2.imread(‘j.png‘,0)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

膨胀

dilation = cv2.dilate(img,kernel,iterations = 1)

先进性腐蚀再进行膨胀就叫做开运算。就像我们上面介绍的那样,它被用来去除噪声。这里我们用到的函数是 cv2.morphologyEx()。

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

图像梯度

梯度简单来说就是求导,对于像素点的分布曲线求导,然后在像素变化较大的地方即为边缘,通过求导可以求出边缘的位置。

OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian

Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

效果如图:

Candy边缘检测

1.去除噪声,高斯核

2.计算梯度

3.进行运算

4.非极大值抑制

5.设置两个阈值(图像的灰度梯度高于 maxVal 时被认为是真的边界,那些低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是就抛弃)

在OpenCV中通过cv2.Canny()来进行,这个函数的第一个参数是输入图像。第二和第三个分别是 minVal 和 maxVal。第三个参数设置用来计算图像梯度的 Sobel卷积核的大小,默认值为 3。最后一个参数是 L2gradient,它可以用来设定求梯度大小的方程。如果设为 True,就会使用我们上面提到过的方程,否则使用方程:. 代替,默认值为 False。

例如:

edges = cv2.Canny(img,100,200)

原文地址:https://www.cnblogs.com/ywheunji/p/10990150.html

时间: 2024-07-31 08:04:57

OpenCV常用基本处理函数(6)图像梯度的相关文章

OpenCV常用基本处理函数(2)图像基本操作

可以根据像素的行和列的坐标获取他的像素值.对 BGR 图像而言,返回值为 B,G,R 例如获取蓝色的像素值: img=cv2.imread('messi5.jpg')px=img[100,100]blue=img[100,100,0]  获取图像属性 图像的属性包括:行,列,通道,图像数据类型,像素数目等img.shape 可以获取图像的形状.他的返回值是一个包含行数,列数,通道数的元组. 1 import cv2 2 import numpy as np 3 img=cv2.imread('m

OpenCV常用基本处理函数(7)图像金字塔和直方图

高斯金字塔 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的.顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值. 这样操作一次一个 MxN 的图像就变成了一个 M/2xN/2 的图像.所以这幅图像的面积就变为原来图像面积的四分之一. 可以得到一个分辨率不断下降的图像金字塔.我们可以使用函数cv2.pyrDown() 和 cv2.pyrUp() 构建图像金字塔. 图像的轮廓: 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同.的颜色或者灰度: 在一个二值

OpenCV常用基本处理函数(5)图像模糊

2D卷积操作 cv.filter2D() 可以让我们对一幅图像进行卷积操作, 图像模糊(图像平滑)使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模糊技术不会模糊掉边界).OpenCV 提供了四种模糊技术. 1.平均 只是用卷积框覆盖区域所有像素的平均值来代替中心元素 cv2.blur() 和 cv2.boxFilter() 来完这个任务 2.高斯模糊 把卷积核换成高斯核,方框不变,原来每个方

OpenCV常用基本处理函数(3)

颜色空间转换 对图像进行颜色空间转换,比如从 BGR 到灰度图,或者从BGR 到 HSV 等 我们要用到的函数是:cv2.cvtColor(input_image ,flag),其中 flag就是转换类型,常用的就几种转换的类型: 对于 BGR↔Gray 的转换,我们要使用的 flag 就是 cv2.COLOR_BGR2GRAY.同样对于 BGR↔HSV 的转换,我们用的 flag 就是 cv2.COLOR_BGR2HSV. 物体跟踪 通过某个颜色来跟踪一个物体, • 从视频中获取每一帧图像 •

[opencv]常用阵列操作函数总结

/*=========================================================================*/ // 阵列操作 /*=========================================================================*/ 基本矩阵和图像运算符 ———————————————————————————————————————————————————————————————————————————

opencv 常用数据结构和函数

点的表示 Point point; point.x = 10; point.y = 8; 或者 Point point = point(10, 8); 颜色的表示 Scalar(a, b, c) 红色分量为c,绿色分量为b,蓝色分量为a 尺寸的表示 Size(5, 5) 矩形的表示 Rect(x, y, width, height); 左上角的坐标和矩形的宽和高 颜色空间转换 CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst,

【opencv系列02】OpenCV4.X图像读取与显示

一.读取图片 opencv中采用imread() 函数读取图像 imread(filename, flags=None) ????filename 图片的路径 ????flags 图像读取方式 ● cv2.IMREAD_COLOR : 加载彩色图像, 图像的任何透明度都将被忽略(默认). ● cv2.IMREAD_GRAYSCALE : 以灰度模式加载图像. ● cv2.IMREAD_UNCHANGED : 加载包含Alpha通道的图像. 也可以使用1, 0 or -1代替,源码中,IMREAD

Python下opencv使用笔记(七)(图像梯度与边缘检测)

梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的.斜方向的等等),所需要的无非也是一个核模板,模板的不同结果也不同.所以可以看到,所有的这些个算子函数,归结到底都可以用函数cv2.filter2D()来表示,不同的方法给予不同的核模板,然后演化为不同的算子而已.并且这只是这类滤波函数的一个用途,曾经写过一个关于matlab下滤波函数imfilter()的扩展应用(等同于opencv的cv2.filter2D函数): 图像滤波函数imfilter函数的应用及其扩展

OpenCV常用图像操作和鼠标操作(双11版本)

更新日志: 1.添加了自适应窗口大小的功能: 2.添加了在图像上画矩形的功能: 3.添加了在大图上画矩形的功能: 4.部分函数名称更改: 5其他修改. 首先是头文件: /* ******* ccv.h ********** ********* opencv常用操作函数声明 ********** */ /* author: autumoon */ #ifndef _CCV_H_ #define _CCV_H_ #include <afxdlgs.h> //打开文件 #include "