opencv 检测图像边缘 Canny算法应用

图解边缘检测

opencv 应用Canny算法进行边缘检测

import cv2 as cv
import numpy as np

img = cv.imread(‘baby_g.jpg‘, 0)
# 二值化图像处理后,边缘检测效果更好
_, thresh = cv.threshold(img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
# canny边缘检测,60以下置为0,180以上置为255,第2、3参数的作用可查看本文最后一部分内容
edges = cv.Canny(thresh, 60, 180)  

cv.imshow(‘canny‘, np.hstack((img, edges)))
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

Canny算法原理

请参考Canny边缘检测算法原理详解 Canny边缘检测算法原理

Canny算法手动实现

请参考Canny边缘检测算法python实现 Canny边缘检测算法python实现

opencv中使用Canny算法

请参考opencv中的Canny算法使用 opencv中的Canny算法使用

通过程序观察cv.Canny函数第二个,第三个参数的作用

import cv2 as cv
import numpy as np

def track_back(x):
    pass

img = cv.imread(‘paojie_g.jpg‘, 0)
cv.namedWindow(‘window‘)

# 创建滑动条
cv.createTrackbar(‘maxVal‘, ‘window‘, 30, 100, track_back)
cv.createTrackbar(‘minVal‘, ‘window‘, 180, 255, track_back)

while(True):
    # 获取滑动条的值
    max_val = cv.getTrackbarPos(‘maxVal‘, ‘window‘)
    min_val = cv.getTrackbarPos(‘minVal‘, ‘window‘)

    edges = cv.Canny(img, min_val, max_val)
    cv.imshow(‘window‘, edges)

    # 按下ESC键退出
    if cv.waitKey(30) == 27:
        break

结果

原文地址:https://www.cnblogs.com/wojianxin/p/12597673.html

时间: 2024-11-05 22:40:39

opencv 检测图像边缘 Canny算法应用的相关文章

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢的画,用手机找了下来,可是回家一看歪歪斜斜,脑补原画内容又觉得不对,那么就需要算法辅助来从原图里提取原来的内容了.不妨把应用的场景分为以下: 纸张四角的坐标(图中红点)已知的情况 也就是上面的左图中4个红点是可以准确获取,比如手动标注,那么就简单了:用OpenCV的Perspective Trans

Max-Min Filter 实现及用于检测图像边缘

一. 边缘检测 边缘检测通常作用于灰度图像上.边缘检测用于检测图像中的线. 边缘检测结果 ↑ 二. 最大 - 最小滤波器(Max - Min) 3*3 Max-Min Filter 算法原理 ↑ 我们知道,图像的细节属于低频信息,图像的边缘属于高频信息.我们使用一定大小的 Max-Min 滤波器作用于图像,当滤波器作用于图像细节时,输出结果往往趋向于0(黑色):而滤波器作用于图像边缘时,Max-Min 输出结果往往趋向于255(白色).所以 最大-最小滤波器 能有效地用于检测图像的边缘和轮廓.

opencv 检测图像线条 霍夫线检测

1 # Writer : [email protected] 2 3 # Data : 2020.3.21 4 5 import cv2 as cv 6 7 import numpy as np 8 9 img = cv.imread('../paojie.jpg') 10 11 gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) 12 13 # 50,150 为二值化时的阈值 apertureSize为Sobel滤波器的大小 14 15 edges = cv.C

opencv:图像边缘发现

拉普拉斯算子 Mat dst; // ksize 3 ,必须是奇数,不同大小会有不同的效果 Laplacian(src, dst, -1, 3, 1.0, 0, BORDER_DEFAULT); imshow("Laplacian", dst); 拉普拉斯算子的缺点:当图像中细节过多,或者有很多噪声的时候,非常容易收到影响 锐化 // 锐化 Mat sh_op = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0

canny算法的MATLAB和C++实现(转载)

图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量.检测和定位,自从1959提出边缘检测以来,经过五十多年的发展,已有许多中不同的边缘检测方法.根据作者的理解和实践,本文对边缘检测的原理进行了描述,在此基础上着重对Canny检

图像边缘和轮廓特征的提取方法

Part1:先介绍几个关于图像处理的概念 1 图像锐化 图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空域处理和频域处理两类.图像锐化是为了突出图像上地物的边缘.轮廓,或某些线性目标要素的特征.这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强. 2图像平滑 概念 图像平滑是指用于突出图像的宽大区域.低频成分.主干部分或抑制图像噪声和干扰高频成分的图像处理方法,目的是使图像亮度平缓渐变,减小突变梯度,改善图像质

用 Python 和 OpenCV 检测图片上的条形码

  用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问题,浏览代码之后,我提供了一些对原始算法的更新和改进. 首先需要留意的是,这个算法并不是对所有条形码有效,但会给你基本的关于应用什么类型的技术的直觉. 假设我们要检测下图中的条形码: 图1:包含条形码的示例图片 现在让我们开始写点代码,新建一个文件,命名为detect_barcode.py,打开并编

opencv目标检测之canny算法

canny canny的目标有3个 低错误率 检测出的边缘都是真正的边缘 定位良好 边缘上的像素点与真正的边缘上的像素点距离应该最小 最小响应 边缘只能标识一次,噪声不应该标注为边缘 canny分几步 滤掉噪声 比如高斯滤波 计算梯度 比如用索贝尔算子算出梯度 非极大值抑制 上一步算出来的边缘可能比较粗糙,假设边缘是一条很细的线的话,上面处理完的结果你可以理解为得到一条比较粗的线条,所谓非极大值抑制,就是要在局部像素点中找到变换最剧烈的一个点,这样就得到了更细的边缘. 双阈值检测和连接边缘 前面

opencv对图像进行边缘及角点检测

opencv对图像进行边缘及角点检测 先看结果: 代码: // ConsoleApplication1_812.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "opencv2/opencv.hpp" class Imagedetector{ public: Imagedetector():threshold(-1) ,cross(5