我编写了脚本,但脚本不起作用。我不知道它有什么错误。我测试了screenCapture函数。有用。我的代码应该按像素进行比较,并且只比较此时的红色。
function [X,Y] = findImageXY(ImageName)
X = 0;
Y = 0;
%Load the small image
SmallImage = imread(ImageName);
%Screen Capture the right screen
ScreenImage1=ScreenCapture([1600,1,1600,900],'ScreenImage.bmp');
ScreenImage = imread('ScreenImage.bmp');
for ii = 1:size(ScreenImage,1) - size(SmallImage,1) - 1
for jj = 1:size(ScreenImage,2) - size(SmallImage,2) - 1
X = 0;
for i = 1:size(SmallImage,1)
for j = 1:size(SmallImage,2)
if ScreenImage(ii+i,jj+j,1)~= SmallImage(i,j,1)
X = inf;
Y = inf;
break
end
end
if isinf(X) == 1
break
end
end
if X == 0
X = jj + ceil(size(SmallImage,2)/2);
Y = ii + ceil(size(SmallImage,1)/2);
break
end
end
if X~=0 && isinf(X)~=1
break
end
end
答案 0 :(得分:-1)
请查看normxcorr2文档中的示例:
Eclipse Plug-in Development Environment (PDE)
值得思考:如果你要做的是在两个相似但不是数字相同的图像上进行模板匹配,那么你将需要使用像归一化的互相关或相位相关这样的技术差异和噪音。刚注意到@dafnahaktana在评论中指出了同样的事情。
c = normxcorr2(SmallImage(:,:,1),ScreenImage(:,:,1));
[ypeak, xpeak] = find(c==max(c(:)));
YtopLeft = ypeak-size(SmallImage,1)+1;
XtopLeft = xpeak-size(SmallImage,2)+1;
您的代码假设子图像与较大图像之间存在精确匹配,这在大多数真实世界模板匹配问题中并不常见,其中经常存在噪声,光照差异等。