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