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

简介

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和图片蓝奏云链接

 

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

 

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

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

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

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

v2H版示例:打开图片

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

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