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都表现的足够优秀。而且使用又是如此简单。

 

posted @ 2022-10-04 00:14  IT情深  阅读(345)  评论(0)    收藏  举报