首页 > 其他分享 >AHK调用opencv(十七)图像梯度 – ahk_v2_beta3

AHK调用opencv(十七)图像梯度 – ahk_v2_beta3

时间:2022-10-12 10:55:07浏览次数:89  
标签:img AHK laplacian dll opencv ahk cv

  • 1.Sobel 和 Scharr 微分

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

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

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

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

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

示例:图像梯度

#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。

标签:img,AHK,laplacian,dll,opencv,ahk,cv
From: https://www.cnblogs.com/ff888/p/16783740.html

相关文章

  • 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既可以从视频文件读取图......
  • AHK调用opencv(四)播放视频文件
    本节内容对open()的另一种使用参数做了研究,注意这里open()里的参数是文件名。因为视频文件不同于相机,视频文件有时长,所以死循环中需要一个判断,判断视频帧是否结束,如果结束......
  • OpenCV-像素值读写(java版)
    @​​TOC​​​很多时候,我们需要读取某个像素值,或者设置某个像素值,甚至需要遍历整个像素值。​​​OpenCV中RGB图像的通道为BGR!!!​​1.读像素值1.get()函数OpenCV中使用get......
  • 利用Opencv从摄像头采集视频
    importcv2#创建窗口cv2.namedWindow('video',cv2.WINDOW_AUTOSIZE)#获取视频设备cap=cv2.VideoCapture(0)whileTrue:ret,frame=cap.read()#......