opencv python:Canny边缘提取

  • Canny是边缘提取算法,在1986年提出的
  • 是一个很好的边缘检测器

Canny算法介绍

非最大信号抑制:

高低阈值连接:

example

import cv2 as cv
import numpy as np

# canny运算步骤:5步
# 1. 高斯模糊 - GaussianBlur
# 2. 灰度转换 - cvtColor
# 3. 计算梯度 - Sobel/Scharr
# 4. 非极大值抑制
# 5. 高低阈值输出二值图像

# 非极大值抑制:
# 算法使用一个3×3邻域作用在幅值阵列M[i,j]的所有点上;
# 每一个点上,邻域的中心像素M[i,j]与沿着梯度线的两个元素进行比较,
# 其中梯度线是由邻域的中心点处的扇区值ζ[i,j]给出。
# 如果在邻域中心点处的幅值M[i,j]不比梯度线方向上的两个相邻点幅值大,则M[i,j]赋值为零,否则维持原值;
# 此过程可以把M[i,j]宽屋脊带细化成只有一个像素点宽,即保留屋脊的高度值。

# 高低阈值连接
# T1,T2为阈值,凡是高于T2的都保留,凡是低于T1的都丢弃
# 从高于T2的像素出发,凡是大于T1而且相互连接的都保留。最终得到一个输出二值图像
# 推荐高低阈值比值为T2:T1 = 3:1/2:1,其中T2高阈值,T1低阈值

def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3, 3), 0)
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)

    grad_x = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1)

    # edge_output = cv.Canny(grad_x, grad_y, 30, 150)
    edge_output = cv.Canny(gray, 50, 150)
    cv.imshow("gray", gray)
    cv.imshow("Canny demo", edge_output)

def main():
    src = cv.imread("../images/Crystal.jpg")
    cv.imshow("demo",src)

    edge_demo(src)
    cv.waitKey(0)  # 等有键输入或者1000ms后自动将窗口消除,0表示只用键输入结束窗口
    cv.destroyAllWindows()  # 关闭所有窗口

if __name__ == '__main__':
    main()

原文地址:https://www.cnblogs.com/wbyixx/p/12244484.html

时间: 2024-10-17 09:04:10

opencv python:Canny边缘提取的相关文章

OpenCV Python教程(1、图像的载入、显示和保存)

本文转载自 OpenCV Python教程(1.图像的载入.显示和保存)     作者 Daetalus 本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonOpenCV的配置这里就不介绍了. 注意,现在OpenCV for Python就是通过NumPy进行绑定的.所以在使用时必须掌握一些NumPy的相关知识! 图像就是一个矩阵,在OpenCV fo

OpenCV使用Canny边缘检测器实现图像边缘检测

纯粹阅读,请移步OpenCV使用Canny边缘检测器实现图像边缘检测 效果图 源码 KqwOpenCVFeaturesDemo Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化. Canny边缘检测器算法基本步骤 平滑图像:通过使用合适的模糊半径执行高斯模糊来减少图像内的噪声. 计算图像的梯度:这里计算图像的梯度,并将梯度分类为垂直.水平和斜对角.这一步的输出用于在下一步中计算真正的边缘. 非最大值抑制:

Python+OpenCV实现图像边缘提取、图像滤波功能

在Jupyter Notebook上使用Python实现下述代码的边缘提取.图像滤波功能,这个过程中实现某些功能处理出来的图像可能会有点粗糙.关于opencv库的安装可以参考:Python下opencv库的安装过程与一些问题汇总. 一.边缘提取 import cv2#导入opencv库 #读取原灰度图片 image=cv2.imread("test.bmp") cv2.imshow("image", image)#将原图片命名为“image”显示出来 #图像的阈值分

centos6.5下安装OpenCV+Python支持

Python调用opencv的原理是:opencv编译出共享库文件,python把这个共享库文件作为一个模块加载并使用.通俗点就是,编译opencv的时候开启python接口选项,编译好了会产生cv2.so(linux下)或者cv2.pyd(windows下)这个共享库文件,python代码中import这个cv2就可以用了.为了能正确import它,往往需要把cv2.so放在python找包能找到的路径下,或者修改PYTHONPATH环境变量让它包含cv2.so所在路径.此外,python的o

ubuntu14 opencv python 安装

本文记录了Ubuntu 14.04下使用源码手动安装OpenCV 3.0的过程.此外记录了在Python中安装及载入OpenCV的方法. 1.安装OpenCV所需的库(编译器.必须库.可选库) GCC 4.4.x or later CMake 2.6 or higher Git GTK+2.x or higher, including headers (libgtk2.0-dev) pkg-config Python 2.6 or later and Numpy 1.5 or later wit

.NET + OpenCV & Python + OpenCV 配置

最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省大家时间. (一)C#.NET + Opencv 1)下载并安装Emgu库(for opencv on .NET env) Download @ http://sourceforge.net/projects/emgucv/ 2)How to use opencv on C#? VS上配置Emgu(

openCV—Python(1)——初始化环境

本系列博客主要參考自--Adrian Rosebrock:<Practical Python and OpenCV: An Introductory,Example Driven Guide toImage Processing and Computer Vision> 一. 分步配置 分别安装下面工具 1.python2.7.x 2.Numpy和Scipy 3.Matplotlib 4.下载OpenCV后解压,提取路径 "\opencv\build\python\2.7"

OpenCV图像Canny边缘检测

Canny边缘检测 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘函数原型:     void cvCanny(       const CvArr* image,              //第一个参数表示输入图像,必须为单通道灰度图      CvArr* edges,                      //第二个参数表示输出的边缘图像,为单通道黑白图      double threshold1,    

树莓派 opencv Python 人脸识别

sudo apt-get update sudo apt-get upgrade sudo apt-get install python-opencv sudo apt-get install python-pip sudo apt-get install python-dev sudo pip install picamera 以上是安装环境(目前opencv 只支持python 2.7:更高版本运行会报"No module named 'cv2'" 错误)