OpenCV系列 - 作者:cc   原链接:https://www.cnblogs.com/ff888/p/16783740.html

  • 1.Sobel 和 Scharr 微分

Sobel 算子是一种联合高斯平滑加微分运算,因此对噪声的抵抗能力更强。可以指定要计算的导数的方向,垂直或水平(分别由参数、Yorder 和 Xorder 指定)。还可以通过参数 ksize 指定内核的大小。如果 ksize=-1,则使用 3×3 Scharr 滤波器,这比 3×3 Sobel 滤波器效果更好。

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("td.png",0)
;核函数的取值范围:1,3,5,7,9
sobelx := cv.Sobel(img,CV_8U:=0,1,0,ksize:=3)
sobely := cv.Sobel(img,CV_8U:=0,0,1,ksize:=3)
cv.imshow("Image", img)
cv.imshow("Image3", sobelx)
cv.imshow("Image4", sobely)
cv.waitKey()
cv.destroyAllWindows()

 

效果图:

  • 2.Laplacian 微分

OpenCV提供了通过Laplacian算子提取图像边缘的Laplacian()函数,该函数利用Laplacian算子提取图像中的边缘信息,与Soble()函数相同,函数的前两个参数分别为输入图像和输出图像,第三个参数为输出图像的数据类型,这里需要注意由于提取边缘信息时有可能会出现负数,因此不要使用CV_8U数据类型的输出图像,否则会使得图像边缘提取不准确。函数第四个参数是滤波器尺寸的大小,必须是正奇数,当该参数的值大于1时,该函数通过Sobel算子计算出图像X方向和Y方向的二阶导数,将两个方向的导数求和得到Laplacian算子。

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("td.png",0)
;核函数的取值范围:1,3,5,7,9
laplacian := cv.Laplacian(img,CV_16U:=2,ksize:=3)
laplacian := cv.convertScaleAbs(laplacian)
cv.imshow("Image", img)
cv.imshow("Image1", laplacian)
cv.waitKey()
cv.destroyAllWindows()

 

效果图:

dbgba优化整理OpenCV系列示例打包下载20240513:

 

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

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

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

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

 

v2H版示例:图像梯度

#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/td.png")
cv.Laplacian(img, laplacian := cv.MAT(), cv2.CV_16U, 3)
cv.convertScaleAbs(laplacian, laplacian)
cv.Sobel(img, sobelx := cv.MAT(), cv2.CV_8U, 1, 0, 3)
cv.Sobel(img, sobelY := cv.MAT(), cv2.CV_8U, 0, 1, 3)
cv.imshow("laplacian", laplacian)
cv.imshow("sobelx", sobelx)
cv.imshow("sobely", sobely)
cv.waitKey()
cv.destroyAllWindows()

 

有错误请联系我改正!

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

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。