c语言如何实现图像对比

c语言如何实现图像对比,第1张

C函数库:

以前版本的C(TC时代)有graphics库可以用,

现在乱谨这个库不是通用的了(VC++不包含graphics.h),但是可以加上easyX(就是个常用非官方库,实现了graphics.h的功能并有不少改进).

给你个思路.

直观的方法:

1.用loadimage将两张图片加载

2.用putimage输出第一张闭贺

3.用putimage输出第二张, 但是第四个参数选择XOR_PUT(图像和原有像素作异或运算)

相同颜色的点将被抹除而只哗态基留下不同部分(但是颜色不能保证正确).

此方法可以快速直观得到不同处(找茬外挂专用)

准确的方法:

1.load两张图片

2.用getpixel逐个对比两张图片

稍稍优化的方法:

1.先用直观方法获得大致不同的区域

2.用GetMouseMsg()获得鼠标相关信息

3.鼠标框选差异区域

4.对应两个图片用getpixel仅处理差异区域.

要是用winapi之类的,那方法就更多了.

遍历像素,对比RGB的颜色差。C语言的话用GTK库,EGE。EasyX貌似要把文件名变成.cpp的。不是纯C语言。你用了easyX.h就知道了。

#include "graphics.h"

float IsMatch(Iamge *a,Image *b )//传两个Image结构体指针进去

{

int same=0,sum//相同像素,总像素

int x,y,W=a->getwidth(),H=a->getheight()

putimage(0,0,a)//连着输出两张图片,方法很多,其他再说。

putimage(W,0,b)

for(x=1w<=Wx++)//比较输出的像素

{

    for(y=1y<=Hy++)

    {

  凳册      sum++

      局粗袜  if(getpixel(x,y,)==getpixel(x+W,y))//对比

   桐激     same++

    }

}

return same/sum//返回一个相似比

}

typedef struct tagRGBQUAD { BYTE rgbBlue// 蓝色袭梁的亮度(值范围为0-255) BYTE rgbGreen// 绿色的亮度(值范围为0-255) BYTE rgbRed// 红色的亮度(值范围为0-255) BYTE rgbReserved// 保留,必须为0 } RGBQUAD 颜色表中RGBQUAD结构数据的个数有biBitCount来确定: 当biBitCount=1,4,8时,分别有2,16,256个表项 当biBitCount=24时,没有颜色表项。 位图信息头和颜色表组成位棚友图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader// 位图信息头链禅槐 RGBQUAD bmiColors[1]// 颜色表 } BITMAPINFO


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8264617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存