|

楼主 |
发表于 2025-3-17 13:12:54
|
显示全部楼层
广东省深圳市
#include "pch.h"
#include "TemplateMatch.h"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <vector>
using namespace cv;
int __stdcall CV_FindPic(
unsigned char* srcData,
int srcLen,
unsigned char* templData,
int templLen,
int* outX,
int* outY,
double threshold)
{
try {
// 将内存数据转换为图像
std::vector<uchar> srcBuffer(srcData, srcData + srcLen);
std::vector<uchar> templBuffer(templData, templData + templLen);
// 解码图像数据
Mat srcImg = imdecode(srcBuffer, IMREAD_COLOR);
Mat templImg = imdecode(templBuffer, IMREAD_COLOR);
// 进行模板匹配
Mat result;
matchTemplate(srcImg, templImg, result, TM_CCOEFF_NORMED);
// 找到最佳匹配位置
double minVal, maxVal;
Point minLoc, maxLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
// 检查匹配度是否达到阈值
if (maxVal < threshold) {
return 0; // 未找到满足阈值的匹配
}
// 计算中心点位置
*outX = maxLoc.x + templImg.cols / 2;
*outY = maxLoc.y + templImg.rows / 2;
return 1; // 找到匹配
}
catch (...) {
return 0;
}
} |
|