首页 > 其他分享 >AHK调用opencv(七)鼠标作为画笔

AHK调用opencv(七)鼠标作为画笔

时间:2022-10-12 10:13:23浏览次数:77  
标签:event 鼠标 AHK dll opencv cv ahk ptr

#NoEnv
SendMode Input
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")
global cv := ComObjCreate("OpenCV.cv")
img := cv.imread("test.png") ;读取图片
global showImg := img.clone()
cv.namedWindow("Image")
proc := RegisterCallback("drawcircle", "F")
DllCall("opencv_world455.dll\cvSetMouseCallback", "Astr", "Image", "ptr", proc, "ptr", 0)
drawcircle(event, x, y, flag){
    ToolTip, % event "`n" x " " y "`n" flag
    If (event == 1){ ;鼠标左键按下
        cv.circle(showImg, ComArrayMake([x,y]), 100, ComArrayMake([255,0,0]), 0) ;画圆
    }
}
While true{
    cv.imshow("Image", showImg)
}
ComArrayMake(inputArray) ;这个函数用来转换参数,比如函数原来需要(0,0),调用这个函数ComArrayMake([0,0])就可以转换过去
{
	arr := ComObjArray(VT_VARIANT:=12, inputArray.Length())
	Loop,% inputArray.Length()
	{
		arr[A_Index-1] := inputArray[A_Index]
	}
	return arr
}

上面用到的dll和图片蓝奏云链接

https://wwm.lanzouw.com/iHcJi0033fob  

天黑版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/test.png")
cv.namedWindow("image")
cv.moveWindow("image", 100, 100)
cv.setMouseCallback('image', drawcircle)
proc := CallbackCreate(drawcircle)
drawcircle(event, x, y, flag){
    ToolTip event "`n" x " " y "`n" flag
    If (event == 1){ ;鼠标左键按下
        cv.circle(img, [x, y], 100, [255,0,0], 0) ;画圆
    }
}
While true{
    cv.imshow("image", img)
}
cv.waitKey()
cv.destroyAllWindows()

有错误请联系我改正!

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

标签:event,鼠标,AHK,dll,opencv,cv,ahk,ptr
From: https://www.cnblogs.com/ff888/p/16783529.html

相关文章

  • 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()#......
  • OpenCV-选取图像局部区域(java版)
    @​​TOC​​​​Mat类提供了多种获取图像局部区域的方法​​1.imshow()1.单行或单列选择获取图像的某一行或某一列,可以使用row()函数或者col()函数方法说明row(inty)提取......
  • python opencv画矩形框保存xml和读取显示
     参考图书馆空位检测(行人+空位对比)https://www.cnblogs.com/gooutlook/p/16192389.html  使用到的原始图像       1鼠标选择画框API_draw.py......
  • 博客园美化之--立方体+线条漂浮+鼠标特效
    页面定制CSS代码不禁用模板默认CSS<style>html{background:pink;height:100%;}/*最外层容器样式*/.wrap{......
  • 鼠标选择多行
    如何批量选择、如何在表格中进行批量选择多行在windows表格中是可以用功能键加鼠标进行批量选择的,这是windows的通用操作,方法如下:利用Shift键+鼠标左键用鼠标左键选......