无锡网络公司无锡网站推广,wordpress文章名,濮阳创建网站公司,网站不备案可以吗OpenCV Canny()函数被用来检测图像物体的边缘。其算法原理如下#xff1a;
高斯滤波#xff1a;使用高斯滤波器平滑图像以减少噪声。高斯滤波器是一种线性滤波器#xff0c;可以消除图像中的高频噪声#xff0c;同时保留边缘信息。计算梯度强度和方向#xff1a;使用Sobe…OpenCV Canny()函数被用来检测图像物体的边缘。其算法原理如下
高斯滤波使用高斯滤波器平滑图像以减少噪声。高斯滤波器是一种线性滤波器可以消除图像中的高频噪声同时保留边缘信息。计算梯度强度和方向使用Sobel算子计算图像中每个像素的梯度强度和方向。梯度强度表示像素点处的边缘强度而梯度方向表示边缘的方向。非最大值抑制在计算梯度强度和方向后非最大值抑制将抑制那些不是局部最大值的像素点。这意味着只有局部最大值的像素点才会被保留下来从而细化边缘。双阈值检测最后双阈值检测用于检测边缘。如果像素的梯度强度大于高阈值则该像素被视为边缘如果像素的梯度强度在两个阈值之间则该像素被视为边缘候选如果像素的梯度强度低于低阈值则该像素被视为非边缘。边缘连接在双阈值检测后可能会得到一些不连续的边缘。为了得到完整的边缘图像通常会通过连接强边缘像素点和与之相邻的弱边缘像素点来完成边缘的连接。
它有两个原型函数如下 该函数在输入图像中查找边缘并使用 Canny 算法在输出图边缘中标记它们。阈值1和阈值2之间的最小值用于边缘链接。最大值用于查找强边缘的初始段。 函数参数 image 8 位输入图像。 edges 输出边缘图单通道 8 位图像其大小与 image 相同。 thrshold1 第一个阈值低阈值 threhold2 第二个阈值高阈值一般第二个阈值取第一个阈值的2倍。 apertureSize Sobel 算子的孔径大小。缺省值为3. L2gradient 一个标志指示是否应使用更准确的 L2
来计算图像梯度幅值( L2gradienttrue )或者默认
就足够了L2gradient false。 这是一个重载成员函数为方便起见而提供。它与上述函数的不同之处仅在于它接受的参数。 使用 Canny 算法和自定义图像梯度查找图像中的边缘。 函数参数 x 输入图像的 16 位 x 导数CV_16SC1 或 CV_16SC3。 y 输入图像的 16 位 y 导数与 dx 类型相同。 edges 输出边缘图单通道 8 位图像其大小与 image 相同。 threshold1 第一个阈值。 threshold2 第二个阈值。 L2gradient 一个标志指示是否应使用更准确的 L2
来计算图像梯度幅值( L2gradienttrue )或者默认
就足够了L2gradient false。 用法示例 新建一个控制台应用程序在源程序中添加如下代码
#include iostream
#include opencv2/opencv.hppusing namespace std;
using namespace cv;int main()
{Mat src imread(1.bmp);if(src.empty()){cout Cannt Open Image! endl;return -1;}imshow(Src, src);Mat dst;Mat edges;cvtColor(src, dst, COLOR_BGR2GRAY);imshow(Dst, dst);Canny(dst, edges, 100, 200);imshow(Edges, ~edges);waitKey(0);
}试运行结果如下