OpenCV系列 - 作者:cc 原链接:https://www.cnblogs.com/ff888/p/16783564.html
改变颜色空间
在 OpenCV 中有超过 150 种颜色空间转换的方法https://docs.opencv.org/4.x/d8/d01/group__imgproc__color__conversions.html#gga4e0972be5de079fed4e3a10e24ef5ef0a353a4b8db9040165db4dacb5bcefb6ea
但我们仅需要研究两个最常使用的方法,他们是 BGR 到 Gray,BGR 到 HSV。
我们使用 cv.cvtColor(input_image, flag)函数进行颜色转换,其中 flag 决定了转换的类型。
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("2.png") img_gray := cv.cvtColor(img, 6) ;cv::COLOR_BGR2GRAY = 6 img_hsv := cv.cvtColor(img, 40) ;cv::COLOR_BGR2HSV = 40 cv.imshow("Image_gray", img_gray) cv.imshow("Image_hsv", img_hsv) cv.waitKey() cv.destroyAllWindows()
目标追踪
现在我们知道了如何将 BGR 图片转化为 HSV 图片,我们可以使用它去提取彩色对象。HSV 比 BGR 在颜色空间上更容易表示颜色。在我们的应用中,我们会尝试提取一个蓝色的彩色对象,方法为:
- 提取每一视频帧。
- 将 BGR 转化为 HSV 颜色空间。
- 我们用蓝色像素的范围对该 HSV 图片做阈值。
- 现在提取出了蓝色对象,我们可以随意处理图片了 。
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") cap := ComObject("OpenCV.cv.VideoCapture") frame := ComObject("OpenCV.cv.MAT") cap.open(0) While True{ ret := cap.read(frame) img_hsv := cv.cvtColor(frame, 40) lower_blue := ComArrayMake([110, 50, 50]) upper_blue := ComArrayMake([130, 255, 255]) mask := cv.inrange(img_hsv, lower_blue, upper_blue) res := cv.bitwise_and(frame, frame, mask := mask) cv.imshow("frame", frame) cv.imshow("mask", mask) cv.imshow("res", res) } cv.waitKey() cv.destroyAllWindows() ComArrayMake(inputArray) { arr := ComObjArray(VT_VARIANT:=12, inputArray.Length) Loop inputArray.Length { arr[A_Index-1] := inputArray[A_Index] } return arr }
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/lena.png") cv.imshow("image", img) ;更改颜色空间 img_gray := cv.MAT() cv.cvtColor(img, img_gray, cv2.CV_COLOR_BGR2GRAY) img_hsv := cv.MAT() cv.cvtColor(img, img_hsv, cv2.CV_COLOR_BGR2HSV) cv.imshow("Image_gray", img_gray) cv.imshow("Image_hsv", img_hsv) ;目标追踪 cap := cv.VideoCapture() frame := cv.Mat() cap.open(0) while true{ ret := cap.read(frame) cv.cvtColor(frame, img_hsv := cv.MAT(), cv2.CV_COLOR_BGR2HSV) cv.inrange(img_hsv, cv.Vector_int([110, 50, 50]), cv.Vector_int([130, 255, 255]), mask := cv.MAT()) cv.bitwise_and(frame, frame, res := cv.MAT(), mask := mask) cv.imshow("frame", frame) cv.imshow("mask", mask) cv.imshow("res", res) } cv.waitKey() cv.destroyAllWindows()
有错误请联系我改正!
本系列所有贡献者(AutoHotKey中文社区群友)不分先后:天黑请闭眼,zzZ…,演好自己,僵尸,城西,Tebayaki。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)