AHK调用opencv(一)打开图片

                                                                       

简介

OpenCV 于 1999 年由 Gary Bradsky 在英特尔创立,第一个版本于 2000 年问世。Vadim Pisarevsky 加入了 Gary Bradsky,负责管理英特尔的俄罗斯软件 OpenCV 团队。2005 年,OpenCV 被用于 Stanley ,这辆车赢得了 2005 年美国穿越沙漠 DARPA 机器人挑战大赛。后来,在 Willow Garage 的支持下,在 Gary Bradsky 和 Vadim Pisarevsky 主导下,OpenCV 项目的开发工作变得活跃起来。OpenCV 现在支持与计算机视觉和机器学习相关的众多算法,并且每天都在拓展中。
 
OpenCV(开源计算机视觉库)是在 BSD 许可下发布的,因此它可以免费用于学术和商业用途。
它具有 C++,Python 和 Java 接口,支持 Windows,Linux,Mac OS,iOS 和 Android。
OpenCV 专为提高计算效率而设计,专注于实时应用。该库以优化的 C/C++ 编写,可以利用多核处理。
通过 OpenCL 启用,它可以利用底层异构计算平台的硬件加速。
 
OpenCV 在全球范围内采用,拥有超过 4.7 万用户社区,估计下载量超过 1400 万。
用途范围从交互式艺术,到地雷检查,网上拼接地图或高级机器人。
AHK调用opencv.dll读取并打开图像示例
#NoEnv ;不检查空变量是否为环境变量(建议所有新脚本使用)。
SendMode Input
;SendInput 和 SendPlay 与 Send 使用相同的语法, 但通常更快更可靠. 此外, 它们缓存了发送期间任何物理的键盘或鼠标活动, 这样避免了在发送时夹杂用户的键击。
SetWorkingDir %A_ScriptDir% ;让脚本无条件使用它所在的文件夹作为工作目录。
hOpencv := DllCall("LoadLibrary", "str", "opencv_world455.dll", "ptr")
;预加载opencv_world455.dll,避免了 DllCall 内部每次调用 LoadLibrary 和 FreeLibrary 的需要, 预先明确装载它可以显著提高执行效率。
hOpencvCom := DllCall("LoadLibrary", "str", "autoit_opencv_com455.dll", "ptr") ;预加载autoit_opencv_com455.dll。
DllCall("autoit_opencv_com455.dll\DllInstall", "int", 1, "wstr", A_IsAdmin = 0 ? "user" : "", "cdecl")
cv := ComObjCreate("OpenCV.cv") ;创建 COM 对象。
img := cv.imread("2.png") ;img := cv.imread("2.png")等于img := cv.imread("2.png", 1) 这里的1就是默认参数
/*
读取图片,这里第二个参数的默认参数是1,也就是cv::IMREAD_COLOR = 1,读入一副彩色图片,忽略alpha通道。
cv.imread(filepath,flags)
filepath:要读入图片的完整路径。
flags:读入图片的标志。
  cv::IMREAD_UNCHANGED = -1,  如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪)
  cv::IMREAD_GRAYSCALE = 0,  如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。
  cv::IMREAD_COLOR = 1,  如果设置,请始终将图像转换为3通道BGR彩色图像。
  cv::IMREAD_ANYDEPTH = 2,  如果设置,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。
  cv::IMREAD_ANYCOLOR = 4,  如果设置,则以任何可能的颜色格式读取图像。
  cv::IMREAD_LOAD_GDAL = 8,  如果设置,使用gdal驱动程序加载图像
  cv::IMREAD_REDUCED_GRAYSCALE_2 = 16,  如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/2。
  cv::IMREAD_REDUCED_COLOR_2 = 17,  如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。
  cv::IMREAD_REDUCED_GRAYSCALE_4 = 32,  如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/4
  cv::IMREAD_REDUCED_COLOR_4 = 33,  如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/4
  cv::IMREAD_REDUCED_GRAYSCALE_8 = 64,  如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/8。
  cv::IMREAD_REDUCED_COLOR_8 = 65,  如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/8。
  cv::IMREAD_IGNORE_ORIENTATION = 128  如果设置,请不要根据EXIF的方向标志旋转图像。
  cv.imread()函数是以多维数组形式存储的,此时得到的这个三维数组就是一个立方体,三维数组的第一维就是图片的高度,第二维是图片的宽度,第三维就是每个像素点在BGR通道的灰度值
cv.imread()的默认格式为bgr
cv.imread()的默认通道格式HWC
*/
cv.imshow("Image", img)
/*
cv.imshow(winname, mat)
cv.imshow()函数可以在窗口中显示图像。该窗口和图像的原始大小自适应(自动调整到原始尺寸)
winname:  一个窗口名称(也就是我们对话框的名称),它是一个字符串类型。第二个参数是我们的图像。您可以创建任意数量的窗口,但必须使用不同的窗口名称。
mat:  需要显示的图像
*/
cv.waitKey()
/*
cv.waitKey([, delay])
waitKey函数属于cv命名空间
一个int类型的参数,默认值为0,根据delay的名称可以猜测参数值是一个延时值
函数返回值为int类型
此函数的功能是等待一个按键按下
函数 Waitkey 在参数delay为正整数n时,延迟n毫秒,或者无限等待按键事件 (delay≤0时) 。由于操作系统在切换线程之间需要时间, 该函数不会等待完全延迟n ms, 它将等待至少延迟n ms, 这具体取决于当时计算机上运行的其他时间。如果在指定的时间之内没有按下键, 则返回按下的键或-1 的ascii码。函数的返回值是键盘按键键值的ascii码。
此函数是 HighGUI 中唯一可以提取和处理事件的方法, 因此需要定期调用它进行正常的事件处理, 除非在处理事件处理的环境中使用 HighGUI。
该函数仅在至少创建了一个 HighGUI 窗口并且该窗口处于活动状态时才有效。如果有多个 HighGUI 窗口, 则其中任何一个都可以处于活动状态。
延迟延迟以毫秒为单位。0是表示 "永远" 的特殊值。即参数值为0时,waitKey函数等待的时间是无限长。
waitKey函数是一个等待键盘事件的函数,参数值delay<=0时等待时间无限长,delay为正整数n时至少等待n毫秒的时间才结束。在等待的期间按下任意按键时函数结束,返回按键的键值(ascii码),等待时间结束仍未按下按键则返回-1。该函数用在处理HighGUI窗口程序,最常见的便是与显示图像窗口imshow函数搭配使用
*/
cv.destroyAllWindows() ;销毁所有 HighGUI 窗口。

 

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

 
 

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

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

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

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

示例:打开图片

#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("src.png")
cv.imshow("image", img)

cv.waitKey()
cv.destroyAllWindows()

有错误请联系我改正!

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

AHK调用opencv(二)保存图片

https://www.autoahk.com/archives/39890

给TA捐赠
共{{data.count}}人
人已捐赠
代码示例社区推荐

修改 CapsLock 的默认行为并把 CapsLock + hjkl 作为方向键

2022-2-10 16:15:24

AHKV1代码示例社区推荐

极速制作一个简易版Quicker示例

2022-2-11 20:03:13

13 条回复 A文章作者 M管理员
  1. dome
    dome给您打赏了¥2
  2. dome

    越来越完善了!支持作者!支持社区!

    • random

      感谢支持!

  3. 1河许人

    注释写的很棒,通俗易懂!

    • random

      刚刚第二章注释写完忘了保存了,等会儿重新搞

  4. 1河许人
    1河许人给您打赏了¥5
  5. 月下马

    运行文件一直显示
    cv := ComObjCreate(“OpenCV.cv”) 这一行有问题
    是要把什么文件放进lib里面么?

    • random

      这三个dll放在脚本同级目录,另外不能以管理员权限运行

    • 万能蜗牛

      三台电脑, 一台可以用, 另外两台跟你一样的报错. 我怀疑是不是因为管理员权限的问题.

  6. dbgba
    dbgba给您打赏了¥5
  7. 1河许人

    这个系列很不错,先给点个赞,这个系列不亚于空的gdi+和飞跃的findtext,我今天也搞了一天,相互交流

  8. 1河许人

    图片、说明、注释?😁

    • random

      先发上来,后面代码多起来就不好分批发了

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索