如题,我在“画图”中用画笔画了一个多边形,分别保存为P_1.jpg和P_2.jpg(颜色、大小都没有改变,只是同一个文件被保存成两个了)。其中只把P_2.jpg的多变形的一条边擦掉一点点。
这样,除了擦掉的部分其他的都应该一样的,我想。
通过程序读入两张图片,分别取得各个像素的R、G、B的值,然后比较相同位置画素的值,不同的地方画上小红圈。可是,出乎意料的是,小红圈全部沿着多变形画了一圈,和预想的完全不一样。有知道图像比较的朋友吗?是我的方法不对?能不能提示我一下呢?

解决方案 »

  1.   

    不要使用JPG有损的压缩方式就可以了.
      

  2.   

    把两张图片都转成
    Byte数组
    方法
    public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
     MemoryStream ms = new MemoryStream();
     imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
     return  ms.ToArray();

    通过循环比较每个Byte
      

  3.   

    来个笨点的办法
    你保存的两张图片用自带的图像编辑工具将一个点(1个像素)更改
    将两张图片分别存在两个数组中
    然后去对比
    可以先用MSG或者text输出对比结果
    看看实际的比较结果跟预想的有没出入
    (可以用数组将那个位/像素对比出错直接显示出来更方便去判断比较方法的正确性)
    如果这里没问题
    你后面的比较也就可以通过了 或者也可以直接边取边比
    GetPixel(j, i)
      

  4.   

    不好意思,没看太明白。就是说不要使用JPG方式进行比较了?
      

  5.   

    首先你应该按图像二值算法(网上找一下)把你的图像变成二值图像 如果你要通过每个点一点点的去做比较肯定要用到2重循环,这样对你的效率会大打折扣。当然根据不同的需求可以用不同的算法,每个点一个一个对比是最普通的算法。我就对您目前的需求提一个简单的思路(首先图像2值化,然后把图像转换为矩阵 里面都是0,1,的组合,RGB255:0,RGB0:1相反也可~然后你把矩阵放到一个平面坐标中去,用投影法把矩阵的每个行的值投到X坐标上去 每个列的值投到Y坐标上去 相当与每个像素值相加)然后比较2副图像投影值的区别 计算到哪个列开始 哪一行开始有差异,具体实现自己去想吧 我只提供思路 这样的效果和耗时比一个一个比来的快,方法很多~欢迎拍砖!
      

  6.   

    就你的问题而言,就是jpg格式的问题,你保存成bmp就不会有这个问题,jpg是有损压缩,在线条边缘的颜色是会有变化的,虽然很微小