首页 > 其他分享 >AHK调用opencv(十八)Canny 边缘检测 – ahk_v2_beta3

AHK调用opencv(十八)Canny 边缘检测 – ahk_v2_beta3

时间:2022-10-12 11:01:30浏览次数:74  
标签:边缘 ahk 检测 opencv AHK Canny cv

Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny边缘检测算法的序幕。 Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括:

  •  以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。
  • 检测到的边缘应精确定位在真实边缘的中心。
  • 图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。
为了满足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它可以由高斯函数的一阶导数来近似。在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。 Canny边缘检测算法的处理流程
  • 使用高斯滤波器,以平滑图像,滤除噪声。
  • 计算图像中每个像素点的梯度强度和方向。
  • 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
  • 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
  • 通过抑制孤立的弱边缘最终完成边缘检测。

相关链接:https://www.cnblogs.com/techyan1990/p/7291771.html

                https://opencv.apachecn.org/#/docs/4.0.0/4.7-tutorial_py_canny

OpenCV 中的 Canny 边缘检测   OpenCV 将以上所有内容放在单个函数中, cv.Canny() 。我们将看到如何使用它。第一个参数是我们的输入图像。第二个和第三个参数分别是我们的 minVal 和 maxVal。第三个参数是 aperture_size。它是用于查找图像渐变的 Sobel 内核的大小。默认情况下,它是 3.最后一个参数是 L2gradient,它指定用于查找梯度幅度的等式。
SetWorkingDir A_ScriptDir
hOpencv := DllCall("LoadLibrary", "str", "opencv_world455.dll", "ptr")
hOpencvCom := DllCall("LoadLibrary", "str", "autoit_opencv_com455.dll", "ptr")
DllCall("autoit_opencv_com455.dll\DllInstall", "int", 1, "wstr", A_IsAdmin = 0 ? "user" : "", "cdecl")
cv := ComObject("OpenCV.cv")
img := cv.imread("2.png", 0)
edges := cv.Canny(img, 100, 100)
cv.imshow("Image", img)
cv.imshow("edges_Image", edges)
cv.waitKey()
cv.destroyAllWindows()

天黑版opencv_ahk.dll使用(改变了调用方式,优化速度…)

相关文件:https://wwz.lanzouw.com/iAkK803eaaud

cv2.ahk和log.ahk来自社区群友zzZ…

可以用文件中的天黑版的v2h版ahk运行。

示例:Canny边缘检测

#Dllload lib
#DllLoad opencv_ahk.dll
#include <cv2>
#include <log>
SetWorkingDir A_ScriptDir
;初始化opencv模块
cv := ObjFromPtr(DllCall('opencv_ahk.dll\opencv_init', 'ptr', DllCall(A_AhkPath '\ahkGetApi', 'ptr'), 'cdecl ptr'))
img := cv.imread("image/lena.png", 0)
;先降噪
cv.GaussianBlur(img, GaussianBlur := cv.MAT(), [5, 5], 0)
cv.Canny(img, edges := cv.MAT(), 100.0, 100.0)
cv.imshow("image", img)
cv.imshow("edges", edges)
cv.waitKey()
cv.destroyAllWindows()

细节

canny边缘检测之后的轮廓可能会出现断开的情况,影响到后续的操作,这时可以使用膨胀来连接断开的部分。

膨胀之后再进行操作

有错误请联系我改正!

本系列所有贡献者(AutoHotKey中文社区群友)不分先后:天黑请闭眼,zzZ…,演好自己,僵尸,城西,Tebayaki。

标签:边缘,ahk,检测,opencv,AHK,Canny,cv
From: https://www.cnblogs.com/ff888/p/16783750.html

相关文章

  • AHK调用opencv(十九)图像金字塔 – ahk_v2_beta3
    图像金字塔是指一组图像且不同分辨率的子图集合,它是图像多尺度表达的一种,以多分辨率来解释图像的结构,主要用于图像的分割或压缩。一幅图像的金字塔是一系列以金字塔性质排......
  • AHK调用opencv(十六)形态转换 – ahk_v2_beta3
    形态学变换是基于图像形状的一些简单操作。它通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。两个基本的形态学操作是......
  • AHK调用opencv(十七)图像梯度 – ahk_v2_beta3
    1.Sobel和Scharr微分Sobel算子是一种联合高斯平滑加微分运算,因此对噪声的抵抗能力更强。可以指定要计算的导数的方向,垂直或水平(分别由参数、Yorder和Xorder指定)......
  • AHK调用opencv(十三)图像的几何变换 – ahk_v2_beta3
    SetWorkingDirA_ScriptDirhOpencv:=DllCall("LoadLibrary","str","opencv_world455.dll","ptr")hOpencvCom:=DllCall("LoadLibrary","str","autoit_opencv_co......
  • AHK调用opencv(五)保存视频
    ;调用opencv录制视频并且保存为文件#NoEnvSendModeInputSetWorkingDir%A_ScriptDir%hOpencv:=DllCall("LoadLibrary","str","opencv_world455.dll","ptr")hO......
  • AHK调用opencv(六)绘图功能
    #NoEnvSendModeInputSetWorkingDir%A_ScriptDir%hOpencv:=DllCall("LoadLibrary","str","opencv_world455.dll","ptr")hOpencvCom:=DllCall("LoadLibrary",......
  • AHK调用opencv(七)鼠标作为画笔
    #NoEnvSendModeInputSetWorkingDir%A_ScriptDir%hOpencv:=DllCall("LoadLibrary","str","opencv_world455.dll","ptr")hOpencvCom:=DllCall("LoadLibrary",......
  • AHK调用opencv(八)作为调色板的跟踪栏
    #NoEnv#Includeopencv_ahk_lib.ahkSendModeInputSetWorkingDir%A_ScriptDir%hOpencv:=DllCall("LoadLibrary","str","opencv_world455.dll","ptr")hOpencvCo......
  • OpenCV-图像读写(java版)
    @​​TOC​​图像读写Imgcodecs类中提供了图像的读写方法。使用imread()函数读取磁盘中的图像;使用imwrite()函数将图像写入磁盘中以下图为例演示。​​(图片来源网络)​​......
  • OpenCV-视频读写(java版)
    @​​TOC​​​​​OpenCV2中提供了两个类来实现视频的读写。读视频的类是​​VideoCapture​​,写视频的类是​​VideoWriter读视频VideoCapture既可以从视频文件读取图......