c# 如何比较两幅图片是否相同

luvain 2010-07-19 11:51:41
最好能实际给出代码
...全文
1641 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
supercpu123 2010-07-21
  • 打赏
  • 举报
回复
将图片弄成单灰度的 然后二值化 然后确定图形边界 然后就是通过一定的算法匹配图形了
最近在研究基于傅里叶变换的图形上下文匹配方法,很强悍的方法,能很好的应对图形变形,旋转等情况的匹配
leavemaple 2010-07-21
  • 打赏
  • 举报
回复
MD5,像素点,流都可以。
格拉 2010-07-20
  • 打赏
  • 举报
回复
图像尺寸要不一样就白忙活了
zhoujk 2010-07-20
  • 打赏
  • 举报
回复
将两张图片转换成 int[,,],然后相减,
在另一个数组里标识出非0的区域即可
jsonzbc 2010-07-19
  • 打赏
  • 举报
回复
mark....
dylike 2010-07-19
  • 打赏
  • 举报
回复
private bool ScanBitmap(Bitmap SourceBitmap, Bitmap TargetBitmap)
{
BitmapData bmpDATA1 = new BitmapData();
SourceBitmap.LockBits(new Rectangle(0, 0, SourceBitmap.Width, SourceBitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData bmpDATA2 = new BitmapData();
TargetBitmap.LockBits(new Rectangle(0, 0, TargetBitmap.Width, TargetBitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
byte[] BTS1 = new byte[bmpDATA1.Stride * bmpDATA1.Height + 1];
byte[] BTS2 = new byte[bmpDATA2.Stride * bmpDATA2.Height + 1];
System.Runtime.InteropServices.Marshal.Copy(bmpDATA1.Scan0, BTS1, 0, BTS1.Length);
System.Runtime.InteropServices.Marshal.Copy(bmpDATA2.Scan0, BTS2, 0, BTS2.Length);
if (BTS1.Length != BTS2.Length) {
return false;
SourceBitmap.UnlockBits(bmpDATA1);
SourceBitmap.UnlockBits(bmpDATA2);
Interaction.MsgBox("两图不同!");
return;
}
for (int I = 0; I <= BTS1.Length - 1; I += 4) {
if (BTS1[I] != BTS2[I] || BTS1[I + 1] != BTS1[I + 1] || BTS1[I + 2] != BTS1[I + 2] || BTS1[I + 3] != BTS1[I + 3]) {
return false;
SourceBitmap.UnlockBits(bmpDATA1);
SourceBitmap.UnlockBits(bmpDATA2);
Interaction.MsgBox("两图不同!");
return;
}
}
return true;
SourceBitmap.UnlockBits(bmpDATA1);
SourceBitmap.UnlockBits(bmpDATA2);
Interaction.MsgBox("两图完全一样");
}

//参数说明:
//SourceBitmap:要比较的源图
//TargetBitmap:要比较的条件图
铛铛 2010-07-19
  • 打赏
  • 举报
回复
顶楼上
hiddkiller 2010-07-19
  • 打赏
  • 举报
回复

private bool ImageEquals(Bitmap bmpOne,Bitmap bmpTwo)
{

for (int i = 0; i < bmpOne.Width; i++)
{
for (int j = 0; j < bmpOne.Height; j++)
{
if (bmpOne.GetPixel(i, j) != bmpTwo.GetPixel(i, j))
return false;
}
}
return true;
}



zhengqian529 2010-07-19
  • 打赏
  • 举报
回复
逐个像素点的比较?
woebird 2010-07-19
  • 打赏
  • 举报
回复
我估计他还想要比较出在图片的那个位置不同。
wantalcs 2010-07-19
  • 打赏
  • 举报
回复
仅仅比较是否相同,考虑一下比较文件的MD5值。
summer_wish 2010-07-19
  • 打赏
  • 举报
回复
mark~ 同问
zgke 2010-07-19
  • 打赏
  • 举报
回复
转换为RGB数据流进行比较把..
sardineany 2010-07-19
  • 打赏
  • 举报
回复
大家一起来找茬游戏必备。。
csz_1987 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wantalcs 的回复:]
仅仅比较是否相同,考虑一下比较文件的MD5值。
[/Quote]


如果是大家来找茬的话,那个比较麻烦了。
ITBABAHL 2010-07-19
  • 打赏
  • 举报
回复
Bitmap Image_One = new Bitmap(@"C:\Documents and Settings\helang\桌面 \ImageEquals\one.jpg", true);
Bitmap Image_two = new Bitmap(@"C:\Documents and Settings\helang\桌面\ImageEquals\two.jpg", true);

private bool ImageEquals(Bitmap bmpOne, Bitmap bmpTwo)
{
for (int i = 0; i < bmpOne.Width; i++)
{
for (int j = 0; j < bmpOne.Height; j++)
{
if (bmpOne.GetPixel(i, j) != bmpTwo.GetPixel(i, j))
return false;
}
}
return true;
}

private void button1_Click(object sender, EventArgs e)
{
if (ImageEquals(Image_One, Image_two))
{
MessageBox.Show("完全一样!");
}
else
{
MessageBox.Show("不同!");
}
}
sadan003 2010-07-19
  • 打赏
  • 举报
回复
不会,感兴趣,帮顶
a184485789 2010-07-19
  • 打赏
  • 举报
回复
颜色直方图,像素比对都可以啊
hyblusea 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dylike 的回复:]
C# code
private bool ScanBitmap(Bitmap SourceBitmap, Bitmap TargetBitmap)
{
BitmapData bmpDATA1 = new BitmapData();
SourceBitmap.LockBits(new Rectangle(0, 0, SourceBitmap.Width, SourceBitm……
[/Quote]


好强悍...学习....
加载更多回复(4)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧