效果演示:

1.功能介绍:

1.1实现了游戏窗口的检测
1.2实现了检测两张不一样图的位置确定
1.3实现了对两张图不同地方的"特殊"显示:以下就是生成图

以下就是生成图中"特殊部分"的显示

1.4综上,根据图片,选出游戏中不同的地方

2.代码讲解:

2.1监控桌面内容

首先我是利用截图,实现监控桌面的内容,因为是找不同,并不是动态图,我就利用系统截图完成了对桌面的监控。下面就是截图桌面功能的实现

//获取桌面窗口的CDC 相当于画布,你可以使用笔、刷、位图、字体等在画笔上画图CDC *pdeskdc = GetDesktopWindow()->GetDC();CRect re;//获取窗口的大小GetDesktopWindow()->GetClientRect(&re);CBitmap bmp;bmp.CreateCompatibleBitmap(pdeskdc, re.Width(), re.Height());//创建一个兼容的内存画板CDC memorydc;memorydc.CreateCompatibleDC(pdeskdc);//选中画笔CBitmap *pold = memorydc.SelectObject(&bmp);//绘制图像    //x:目标矩形区域的左上角x轴坐标点。//y:目标矩形区域的左上角y轴坐标点。//nWidth:在目标设备中绘制位图的宽度。//nHight:在目标设备中绘制位图的高度。//pdeskdc:源设备上下文对象指针。//xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。//ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。//SRCCOPY:光栅操作代码memorydc.BitBlt(0, 0, re.Width(), re.Height(), pdeskdc, 0, 0, SRCCOPY);//获取鼠标位置,然后添加鼠标图像CPoint po;GetCursorPos(&po);HICON hinco = (HICON)GetCursor();memorydc.DrawIcon(po.x - 10, po.y - 10, hinco);//选中原来的画笔memorydc.SelectObject(pold);BITMAP bit;bmp.GetBitmap(&bit);// DWORD size = bit.bmWidth * bit.bmHeight ;//定义 图像大小(单位:byte)DWORD size = bit.bmWidthBytes * bit.bmHeight;LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR, size);//后面是创建一个bmp文件的必须文件头,想要了解可以参考msdnBITMAPINFOHEADER pbitinfo;pbitinfo.biBitCount = 24;pbitinfo.biClrImportant = 0;pbitinfo.biCompression = BI_RGB;pbitinfo.biHeight = bit.bmHeight;pbitinfo.biPlanes = 1;pbitinfo.biSize = sizeof(BITMAPINFOHEADER);pbitinfo.biSizeImage = size;pbitinfo.biWidth = bit.bmWidth;pbitinfo.biXPelsPerMeter = 0;pbitinfo.biYPelsPerMeter = 0;GetDIBits(pdeskdc->m_hDC, bmp, 0, pbitinfo.biHeight, lpdata,(BITMAPINFO*)&pbitinfo, DIB_RGB_COLORS);BITMAPFILEHEADER bfh;bfh.bfReserved1 = bfh.bfReserved2 = 0;bfh.bfType = ((WORD)('M' << 8) | 'B');bfh.bfSize = 54 + size;bfh.bfOffBits = 54;

然后写入base6.jpg 文件中去

//写入文件CFile file;if (file.Open((LPCTSTR)L"base6.jpg", CFile::modeCreate | CFile::modeWrite))//if (file.Open("1.bmp", CFile::modeCreate | CFile::modeWrite)){file.Write(&bfh, sizeof(BITMAPFILEHEADER));file.Write(&pbitinfo, sizeof(BITMAPINFOHEADER));file.Write(lpdata, size);file.Close();}

我这边展示一下上面动图中截图的内容是什么(正常来说不会出现我这个录屏软件,所以大家不用管):

2.2对上面图片base6.jpg的内容进行处理:窗口检测位置

由于前期做了很多无用功,所以这个软件整个完成时间也就几天时间
下面的代码就是检测游戏窗口的位置,实现思路就是二值化后,找到窗口第一根白色水平线(我设置大于100个像素就算我们窗体位置)最左边的位置位置,记录坐标,用这个坐标来确定整个窗体位置。

Mat image = imread("base6.jpg");//转化成二值图Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);cv::Mat contours;cv::Canny(gray,contours,250,            //调了了很长时间,还是感觉大于875为边缘,小于250不是边缘效果最好。875);//imshow("Canny", contours);int hight, width;hight = image.rows;width = image.cols;//用于记录连续像素点存在的次数int number = 0;bool istrue = false;//截图窗口的高和宽int imageheight, imagewidth;//int widthget;for (int i = 0; i < hight; i++){uchar* data = contours.ptr<uchar>(i);//wfor (int j = 0; j < width; j++){if (istrue){break;}//white = 255;if ((int)data[j] != 0){//widthget = j;number++;if (number>100){cout << "number:" << number;number = 0;cout << "高:" << i << "宽:" << j - 101 << endl;imageheight = i;imagewidth = j - 101;istrue = true;break;}}else{//如果断一次,都要初始化值,防止当前行存在其他像素的干扰number = 0;}}//每行遍历结束,若未发现游戏边框,便要初始化记录值number = 0;}
2.3把两幅图的内容截取出来

由于上一个内容就是找到了窗体位置,那么我们的窗体内的两幅图的位置就很好找了,我这里为了早点能完成作业,就直接设置像素开始切割出来两幅图片了。

     Rect mainimage(imagewidth, imageheight, 1282, 959);//imshow("切割图", mainimage);Mat ROImainImage = image(mainimage);//imshow("ROImainImage",ROImainImage);Rect rectLeft(117, 390, 474, 356);Rect rectRight(688, 390, 474, 356);Mat ROILeft = ROImainImage(rectLeft);Mat ROIRight = ROImainImage(rectRight);
2.3根据bitwise_xor(inputImage1,inputImage2,outputImage)函数处理两张图做xor运算

由于上一个内容,把两幅图截取了出来,所以根据两幅图,完成xor运算

     Mat outputimage, out, andout;bitwise_xor(ROILeft, ROIRight, outputimage);imshow("xor", outputimage);

综上就完成了大家来找茬辅助外挂

3.尚存bug:

3.1窗口左上角尽量不要碰到其他图标,以免检测不到窗口
3.2推荐使用黑底的壁纸,或者全黑,以免检测不到窗口
3.3不要遮挡游戏窗口内的画面,以免出现错误。

4.github地址:https://github.com/index9-44/opencv.git

5.如果出现无法编译或者找不到opencv_world342d.lib错误,请依次检查我项目的opencv位置(我的opencv文件位置在D盘:D:\OpenCV)与您的位置是否一致,或者修改我项目opencv的位置。

opencv实训记录(大家来找茬辅助外挂)相关推荐

  1. QQ找茬辅助工具的制作

    QQ找茬辅助工具的制作 转载请注明出处:http://www.cppblog.com/greatws/archive/2009/05/05/81996.html 这段时间GF一直在玩QQ找茬,看了一下 ...

  2. QQ找茬辅助工具 C#

    昨天晚上用C#做了一个QQ游戏"找茬"辅助工具.这个不能算是一个外挂工具,因为不涉及到服务器和客户端的问题,只涉及到图像处理的知识.目前只是实现了基本的功能,但是已经够用了,玩了几 ...

  3. Python一个月实训记录

    文章目录 Python一个月实训 0701 0702 0703 0706 0707 0708 0709 0710 0713 1.爬虫介绍 1.1 大数据时代 1.2 什么爬虫? 1.3 爬虫如何爬取网 ...

  4. 【3dCG】—— 期中创新实训记录①

    本次记录主要内容为:期中项目实训介绍,剧本介绍,我做的工作介绍,感悟感想以及下周的工作安排. 前两周,也就是三月份我们的三维制作团队主要进行项目的前期准备,我们完成的任务有 剧本再讨论 故事板绘制 动 ...

  5. 计算机综合实训记录,计算机基础实训报告记录.doc

    计算机基础实训报告记录 PAGE PAGE 1 -------------------------------- 作者: -------------------------------- 日期: - ...

  6. 项目实训记录(1-2周)

    前言 我是我们项目实训小队的队长,负责了开题答辩.下面是项目实训1-2周的工作记录. 一.确定选题 我们小组四个同学就选题进行了很长时间的讨论,最后确定选择做一个基于人工智能技术的大学生辅助学习系统. ...

  7. java 之在校期间最后一次实训记录

    提前一天晚上得知所要进行实训的项目为 邮政储蓄柜台系统项目 这段时间(大概两个星期)晚上上课,下午不上课. 随机调整学习模式: 注意:会的也要听!!!!!     正常听课,会的也要听,中午吃完饭后, ...

  8. 2021年山东大学软件学院项目实训记录(第一周)

    这次项目实训中,我们小组选择的题目是在线考试系统,经过讨论分工,我负责考试管理部分中的前端开发部分. 首先进行环境配置. 前端开发最为便利的开发工具为VScode,我们选择的开发框架是Vue. VSc ...

  9. Python实训记录,对字符串进行格式化处理输出

    实训目的 掌握对字符串进行格式化的方法 要求: 编写程序,实现输入下面的结果:(宽度为30)函数. 代码: n='学生管理系统' print('{:*^30}'.format(n)) //第一题 pr ...

  10. 基于OpenCV与MFC的大家来找茬外挂[升级版]

    上次编写的大家来找茬外挂虽然是实现了查找不同区域并把不同的区域显示在屏幕上,但是得手动点击,显得很是麻烦,所以最近把程序又改了一改,实现了自动点击功能. 程序的编写流程: 1.做一幅游戏窗口背景图片S ...

最新文章

  1. php网站搭建致命错误203终止,PHP致命错误:无法重新分配$this
  2. Java中的复合设计模式
  3. 年仅26岁!这位双一流大学的特任教授,攻克世界数学难题
  4. nn.Conv2d的解释
  5. centos7 开机启动脚本
  6. 满满干货!mysql无法修改表的数据
  7. delphi控件属性大全-详解-简介
  8. pytest allure测试报告_pytest文档32allure描述用例详细讲解
  9. 云端软件平台 如何共享自己封装的云端软件
  10. 2021年胡润中国百富榜研究报告
  11. linux下网速监控 linux及android分网卡网速监控
  12. “十三五”公共安全规划涉及哪些安防概念?
  13. Java Web——基于Jsp+Servlet的大学生社团管理系统
  14. 【PPic】基于Electron+Vue+iView的图床应用设计
  15. MinGW和MSYS简介
  16. 计算机视觉专业排名,2020美国人工智能专业排名TOP10!
  17. 微信红包后台系统可用性设计实践
  18. 英语学习-索贝斯演讲学习摘要
  19. 2、英飞凌-TC2XX/TC3XX学习笔记:AURIX Development Studio 使用
  20. TIB、TEB 信息

热门文章

  1. 吐血推荐:无解的完成图
  2. 山东一卡通获省内首家第三方支付牌照
  3. cisco是什么公司(cisco是什么公司新加坡)
  4. python幂次_python n次幂
  5. 【电力电子】【2012.07】基于功率因数校正的三相整流器设计与仿真
  6. 现金红包、裂变红包、企业付款
  7. 优动漫PAINT拾色器功能介绍
  8. 优动漫PAINT下载的素材找不到怎么办?
  9. Microsoft edge升级之后收藏夹内容丢失_等了这么久,Edge 终于成为我的默认浏览器...
  10. 五年饮冰,难凉热血”,一名专科生的求学历程