C#中的模板匹配

时间:2011-04-17 11:53:10

标签: c# image-processing image-manipulation aforge

我想获取网页中特定图像的坐标(X,Y)。获取该图像坐标后,我将光标移动到此位置,然后以编程方式点击此图像。

我已将图像保存在本地我必须比较我将此图像与网页进行比较并在网页中找到它的位置。 这怎么可能在C#

如果在C#中无法做到这一点。在这种情况下,有人会建议我任何黑客攻击吗,

4 个答案:

答案 0 :(得分:1)

任何网页都是客户端特定的浏览器。你不能在C#中这样做,因为C#是一种服务器语言并在服务器上运行,然后以浏览器特定的语言返回结果。每个客户端将具有不同的分辨率,因此图像的位置不同。为了获得图像的坐标,您需要使用javascript,然后将指针移动到该位置。您可以使用jQuery并获取图像位置。

答案 1 :(得分:1)

AForge中的模板匹配是使用ExhaustiveTemplateMatch类完成的:

http://www.aforgenet.com/framework/docs/html/17494328-ef0c-dc83-1bc3-907b7b75039f.htm

但您首先需要浏览器窗口的屏幕截图才能匹配。

答案 2 :(得分:0)

据我所知,您希望在浏览器上模拟点击事件,该事件显示包含您图片的页面。如果是这样,你可以这样做 -

IntPtr lParam = (IntPtr)((y << 16) | x); 
IntPtr wParam = IntPtr.Zero; // Modifier flags - eg ctrl etc 
SendMessage(handle, 0x201, wParam, lParam); // Mouse LBUTTON down
SendMessage(handle, 0x202, wParam, lParam); // Mouse LBUTTON up

handle是目标浏览器窗口句柄,(x,y)是要模拟点击的位置 - 可以是图像rect的中心。

答案 3 :(得分:0)

我会使用纯JavaScript来从网页上获取信息。

function getX(/* string */ elementId) {
    return document.getElementById(elementId).offsetLeft;
}

function getY(/* string */ elementId) {
    return document.getElementById(elementId).offsetTop;
}

如果您需要相对于视口的位置:

function getX(/* string */ elementId) {
    return document.getElementById(elementId).offsetLeft - document.body.scrollLeft;
}

function getY(/* string */ elementId) {
    return document.getElementById(elementId).offsetTop - document.body.scrollTop;
}

如果您需要在不使用鼠标的情况下对图像执行onClick操作:

function clickIt(/* string */ elementId) {
    document.getElementById(elementId).onclick();
}

要使用C#调用JavaScript,您需要创建WebBrowser控件,加载网页,然后调用脚本。 You can find how to do that here.

MSDN documentation for HtmlDocument.InvokeScript