Delphi中小试Opencv--图像差异对比(大家来找茬辅助实现cvAbsDiff函数的使用)
首先下载Delphi-OpenCV
下载地址:https://github.com/Laex/Delphi-OpenCV
国际惯例先上代码
program CompareImage; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, ocv.core.types_c in 'ocv.core.types_c.pas', ocv.core_c in 'ocv.core_c.pas', ocv.highgui_c in 'ocv.highgui_c.pas'; Const filenameL = 'l.bmp'; filenameR = 'r.bmp'; Var imageL:pIplImage = nil; imageR:pIplImage = nil; imageDiff:pIplImage = nil; begin try imageL := cvLoadImage(filenameL, 1); //-1 默认读取图像的原通道数 ,0 强制转化读取图像为灰度图 ,1读取彩色图 imageR := cvLoadImage(filenameR, 1); if Assigned(imageL) and Assigned(imageR) then begin cvNamedWindow('imageL', CV_WINDOW_AUTOSIZE); cvShowImage('imageL', imageL); cvNamedWindow('imageR', CV_WINDOW_AUTOSIZE); cvShowImage('imageR', imageR); imageDiff:= cvCreateImage(cvGetSize(imageL),imageL.depth,imageL.nChannels); if Assigned(imageDiff) then begin cvAbsDiff(imageL,imageR,imageDiff); cvNamedWindow('imageDiff', CV_WINDOW_AUTOSIZE); cvShowImage('imageDiff', imageDiff); end; cvWaitKey(); cvDestroyWindow('imageL'); cvDestroyWindow('imageR'); cvDestroyWindow('imageDiff'); cvReleaseImage(imageL); cvReleaseImage(imageR); cvReleaseImage(imageDiff); Readln; end; Readln; except on E: Exception do WriteLn(E.ClassName, ': ', E.Message); end; end.
大家一起来找茬对比效果:
说实话,这玩意功能是真的很强大,之前我在2009年就写过一个基于像素RGB对比的Delphi版大家来找茬的辅助,一直可以使用,一直到2016年底失效了,原因就是2016年QQ游戏更新增加了反作弊处理,左右两幅图片进行了增加躁点,图像背景干扰等差异化处理,导致程序无法进行RGB像素扫描处理这些图片,包括连灰阶处理,二值化都成问题,今天一试这opencv居然秒搞定。真是彪悍!
之前的辅助效果图:
现在用像素对比的话,是全红的。即所有的点都不匹配,如果转灰度图(左下)或二值化(右下),是如下效果(只能操作一部分,很是奇怪)
这根本不符合逻辑,同样的代码转其它的图片正常的很
用的也是国际通用公式计算:
灰度化过程还是依照大多数图像灰度处理惯例,计算YUV颜色空间的Y分量作为灰度图,
公式为:Y = 0.299 * R + 0.587 * G + 0.114 * B
不知道是什么原因。没去细查。
以后会多研究一下opencv,毕竟在人脸识别,图像分析对比,物品识别,运动图像捕捉,人工智能,视频预警监控等众多领域opencv都表现的足够优秀。而且使用又是如此简单。
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751778.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?