C#如何在较大的图像中获取较小图像的位置

时间:2016-05-31 03:20:20

标签: c# image-processing

我是图像处理新手所以请原谅我的无知。我正在尝试想出一种方法来获得包含更大图像的子图像的坐标。例如,我有New York skyline的大图像和Empire State building之一。大图像始终是高质量图像,小图像由用户的相机扫描较大图像的打印版本提供。在那里,较小图像的质量,比例和颜色将不会与较大图像的质量,比例和颜色完全匹配。我想要得到的是从较大图像的左上角到较小图像的左上角的X,Y坐标,就像较小的图像是放置在较大图像中的拼图一样。非常感谢有人可以指出我正确的方向。感谢

修改 感谢您的反馈。我已经意识到这可能是一项非常艰巨的任务。我结束了采取不同的方法。我将在上述打印介质中嵌入可识别的形状,并使用OpenCvSharp(OpenCV周围的免费C#包装器)来检测它们。

2 个答案:

答案 0 :(得分:0)

这是一个非常艰巨的大项目。

BTW,您可以通过GetPixel()方法获得像素的颜色。

以下代码创建一个200x200图像,并获得该图像的100,100协调颜色。

Bitmap bmp = new Bitmap(200,200);
Color c = bmp.GetPixel(100,100);

为了有效地浏览图像,必须使用指针(不安全的代码)而不是GetPixel()方法,除非性能太慢。

答案 1 :(得分:0)

给你一个可能的方向,

你可能在这里面对的是一种模式检测和/或识别(又称机器学习),我建议寻找现成的实现,因为这是一项复杂的任务。

基本思想是训练或教授关于感兴趣对象特征的算法,然后算法在图像中搜索与您的模式匹配的任何内容。

那里有很多算法;每个人都有自己的方法。作为一个起点,您可以尝试查看众所周知的图像处理框架可以提供的内容 - OpenCV:

http://docs.opencv.org/2.4/doc/tutorials/features2d/feature_homography/feature_homography.html

编辑: 用于.NET C#的OpenCV包装器作为OpenCV是C ++项目

http://www.emgu.com/wiki/index.php/Main_Page