|
调用OpenCV – 4.5.5机器学习找图
最型看到OpenCV – 4.5.5图像处理机器学习找图不错,以下是从工程复制的一些代码
实测c++mfc调用OpenCV – 4.5.5机器学习游戏窗口大图中找小图,找到后返回小图坐标,实测与大漠插件dm.dll找图函数返回的坐标一样
(找到后移动鼠标到小图坐标并点击很简单自己解决这里略过)
以下是核心代码供参考
Mat g_srcImage, g_tempalteImage, g_resultImage;
int g_nMatchMethod;
int g_nMaxTrackbarNum = 5;
CString g_cstr1, g_cstr2, g_cstr3, g_cstr4;
double minValue, maxValue;
Point minLocation, maxLocation, matchLocation;
void on_matching(int, void*)
{
Mat srcImage;
g_srcImage.copyTo(srcImage);
int resultImage_cols = g_srcImage.cols - g_tempalteImage.cols + 1;
int resultImage_rows = g_srcImage.rows - g_tempalteImage.rows + 1;
g_resultImage.create(resultImage_cols, resultImage_rows, CV_32FC1);
matchTemplate(g_srcImage, g_tempalteImage, g_resultImage, g_nMatchMethod);
//返回的值在g_resultImage的矩阵中
normalize(g_resultImage, g_resultImage, 0, 1, NORM_MINMAX, -1, Mat());//将上面的返回数据归一化数据
minMaxLoc(g_resultImage, &minValue, &maxValue, &minLocation, &maxLocation);
if (g_nMatchMethod == TM_SQDIFF || g_nMatchMethod == CV_TM_SQDIFF_NORMED)
{
matchLocation = minLocation;
}
else
{
matchLocation = maxLocation;
}
}
int CjisDlg::TestMain()
{
g_srcImage = imread("QHD.bmp");//被找的大图
if (!g_srcImage.data)
{
return -1;
}
g_tempalteImage = imread("QH.bmp");//要找的小图
if (!g_tempalteImage.data)
{
return -1;
}
on_matching(0, NULL);
g_cstr1.Format("%d", (int)minValue);
m_Show1 = g_cstr1;//m_Show1为编辑框1的变量 类型为CString,以下同
g_cstr2.Format("%d", (int)maxValue);
m_Show2 = g_cstr2;
g_cstr3.Format("%d,%d", (int)(minLocation.x - 8), (int)(minLocation.y - 31));//返回的找图坐标,已测试与dm找图函数FindPicE返回的坐标一致.-8和-31是坐标偏差
m_Show3 = g_cstr3;
g_cstr4.Format("%d,%d", (int)(matchLocation.x + g_tempalteImage.cols), (int)(matchLocation.y + g_tempalteImage.rows));//在找到的坐标画矩形的坐标
m_Show4 = g_cstr4;
UpdateData(false);
return 0;
};
下面用的是免注册调用大漠插件dm.dll找图参考
.子程序 移动_并单击
.局部变量 坐标1, 坐标
.局部变量 延迟间隔, 整数型
.局部变量 返回坐标文本, 文本型
.局部变量 返回坐标文本中, 文本型
.局部变量 返回坐标文本尾, 文本型
坐标1.x = 到整数 (编辑框坐标x.内容)
坐标1.y = 到整数 (编辑框坐标y.内容)
SetWindowPos (到整数 (编辑框句柄.内容), -1, 0, 0, 0, 0, 位或 (1, 2))
延迟 (100)
局_对象1.数值方法 (“KeyPress”, #Tab键)
延迟 (100)
局_对象1.数值方法 (“KeyUpChar”, #Tab键)
返回坐标文本 = 局_对象1.文本方法 (“FindPicE”, 0, 0, 1024, 768, “石头.bmp”, “3C84EF”, 1, 0)
延迟 (1000)
调试输出 (返回坐标文本)
返回坐标文本中 = 取文本中间 (返回坐标文本, 3, 3)
返回坐标文本尾 = 取文本中间 (返回坐标文本, 7, 3)
坐标1.x = 到整数 (返回坐标文本中)
坐标1.y = 到整数 (返回坐标文本尾)
调试输出 (返回坐标文本中, 返回坐标文本尾)
局_对象1.数值方法 (“MoveTo”, 坐标1.x, 坐标1.y)
模拟鼠标左键按下并弹起 (100)
局_对象1.数值方法 (“KeyPress”, #Tab键)
延迟 (100)
局_对象1.数值方法 (“KeyUpChar”, #Tab键)
编辑框坐标x.内容 = 返回坐标文本中
编辑框坐标y.内容 = 返回坐标文本尾
SetWindowPos (到整数 (编辑框句柄.内容), -2, 0, 0, 0, 0, 位或 (2, 1))
写配置项 (取运行目录 () + “\配置.ini”, “数据”, “句柄”, 编辑框句柄.内容)
写配置项 (取运行目录 () + “\配置.ini”, “数据”, “坐标x”, 编辑框坐标x.内容)
写配置项 (取运行目录 () + “\配置.ini”, “数据”, “坐标y”, 编辑框坐标y.内容)
|
评分
-
查看全部评分
|