大家来找茬图片对比问题 算法怎么写才合适?
自己刚学C++没多长时间 想自己写一个大家来找茬的辅助工具 对算法也不清楚 对图像学也不是很明白
先写了一个验证自己算法的小程序FindDifferences 我把QQ大家来找茬全屏后截了几张图片 FindDifferences所作的工作就是读取截屏bmp文件 对比截屏中两张找茬图片 找出不一样的地方 思路很简单 用GetPixel得到两个图片位置中相对位置的点的 COLORREF值 如果不一样,就将两张中的一张图片中的这个点用纯色覆盖 有了想法就去写了 写出来之后运行 结果惨不忍睹 两张图片中没有几处地方是全相等的
************************************************************************************************
这里有一个问题 是否找茬游戏中的两张图片不可能除了找茬的位置之外COLOOREF完全相等?
************************************************************************************************
之后有人提醒我要有一定的容错率 因为没有接触过图形学 怎么容错不清楚 就去网上找了一下资料 有一个公式 sqrt(absR*absR+absG*absG+absB*absB)>100 具体原理我不懂 我就拿来用了 结果还算可以 但是容错的范围是随时要改的
***************************************************************************************************************
这里是第二个问题 两张图片对比是不是不能用GetPixel得到COLORREF来对比是否相等 必须要有容错率?
***************************************************************************************************************
对算法一筹莫展的时候去网上找了一个已经做好的QQ大家来找茬的辅助工具,不管窗口是否最小化,分辨率如何,找得都很精准,唉,信心倍受打击啊
***************************************************************************************************************
这里是第三个问题 是不是这种辅助程序不能用简单的对比颜色 还要涉及内存问题?
***************************************************************************************************************
下面是自己写的代码
#include <windows.h>#include <math.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int就非得写N多个
[解决办法]
OpenCV
[解决办法]
玩这个游戏时用户点击的时候并不需要点击的非常精确到像素的位置,所以估计两个图片之间是比较某个区域的。如果用你说的那种比较什么色阶就太复杂了。可以提前将两个图片不同之处存储起来,然后只比较区域位置就可以了。这个可以精确到5像素以内。
[解决办法]
思路:
扫描图片时,用a*a象素的框移动式(可以隔b象素移动)的框选图片信息,计算框内的平均色度值。
最后进行两图平均色度值相差的大小排序,选择最相差最大的5个框,则此5个框为目标区。