关注,这个问题很专业啊
动态创建图片的知识。
首先要声明一个新的位图对象、一个像素的集合。以一个有规律的方法循环你要比较的两个图片的像素点,循环中,比较图片1中的这个点在图片2中是否一样,大概要循环很多次。找到区域像素点相同的像素集合,将他们添加到新图片中,生成一个新的照片。这个应该就是你想要的图片吧。
困难点应该就是这个遍历图片像素的算法,因为不是验证一个点相同,是验证多个有坐标的点相同。但是应该也可以实现,在网络上偏离像素的资料不少啊,象验证图片相似啊,数字识别啊。
我觉得可以把所谓“像素”抽象一下,以使得算法更具有适用性。
不如将图片划分为若干个大小固定的子图片“区域”(Zone),大小粒度由具体应用配置;最大为整个图片(这个不可用,过于特殊),最小为单个像素。通过计算各区域的哈希值,进行多图片间的共有大区域匹配工作。
算法主要部分借鉴网络视频的“分片”算法,将一段视频分割为若干段,而每段设为独立单元,比较利于索引、定位。
假设两张图片 A[a1,b1,c1,d1][a2,b2,c2,d2][a3,b3,c3,d3][a4,b4,c4,d4]
B[...]...
其中 a,b,c,d 为各单元区域的哈希值。那么,可合并的条件必定是:图片 A 的某顶点可并入 B,或 图片 B 的某顶点可并入 A (两者的满足是同时的)。
步骤:
-----------------------------------------------------------------
单元区域 a';
bool isFound;
//从 B 中找 A
foreach(顶点 a in A){
if(B.TryFind(a, out a')){
if(!B.MoreMatch(a))//从该顶点出发,做更多匹配测试(验证是否该区域的相邻区域等真能重合);完全匹配成功条件由开发人设置。
Continue;
isFound = true;
...
break;
}
}
//其它的操作, 匹配失败处理等
....
-------------------------------------------------------
解题的主要思路是渐进法,比如先将图片设置为单元区域的两倍大,然后探讨合并思路;然后设置为 3 倍大……
由简入奢易,由奢入简难,呵呵。
你还是直接用Photoshop拼接全景图吧~算法是相当复杂的
日啊看不懂啊