如何比较两幅JPEP的图片,找出不同,并在不同区域自动用画红框

AAAAAANWJ 2007-10-22 06:33:54
如果比较两幅JPEP图片,
直接读到Buffer中,一位一位比行不行?
怎么自动将不同用红框标记出来呢?请高手指点.....
...全文
787 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
副组长 2009-08-23
  • 打赏
  • 举报
回复
JPG图像在内存里面也是位图了,和其它格式的位图一样。
如果你将两个图像都读到内存里面,理论上逐个像素比较就可以找出二者之间的差异。但是实际应用中虽然看起来是一样的图像,但是颜色分量可能不一致,因为人的眼睛识别图像有其特殊性,因此在比较是给予一定的容差。

比较的方法可以逐个像素相减再加128,形同的区域表现为均匀的灰色。

将图像转换为灰度图像会比较好一点,千万不要将一个像素的RGB转换为COLORREF.
装换灰度图像的公式可以这样:gray=r*0.3+g*0.59+b*0.11;
smtyxh 2009-08-23
  • 打赏
  • 举报
回复
程序写完了,第一步用CXimage得到像素点,比较.如果不同,则把坐标记录下来.
第二步将记下的坐标,利用之间的距离,划分出多个不相连的的CRGN.
第三步将区域画出.按画片显示的比例因子.画出矩形框.


有这个源代码提供吗,我想要一个,不知行不行?
smtyxh 2009-08-23
  • 打赏
  • 举报
回复
谢过了
  • 打赏
  • 举报
回复
到这来讨论吧

菜鸟学编程之C++/MFC: QQ群 41977413 C++/MFC编程开发技术,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加

菜鸟学编程之C/C# : QQ群 41976716 C/C#编程开发技术,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加

菜鸟学编程之VB/VBA : QQ群 20772662 VB/VBA编程开发技术群,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加

Elysium 2007-11-12
  • 打赏
  • 举报
回复
Finding Similarity Between Images
http://www.codeguru.com/cpp/g-m/bitmap/article.php/c4885/
AAAAAANWJ 2007-10-29
  • 打赏
  • 举报
回复
ding
lyg_zy 2007-10-26
  • 打赏
  • 举报
回复
mark
AAAAAANWJ 2007-10-26
  • 打赏
  • 举报
回复
我也认为是坐标没写对.但是该怎么写呢......
CxImage* ima = new CxImage();
if (ima) {

/* RGBQUAD c={255,0,0,0};
ima->DrawLine(100,500,500,500,c,TRUE);//--能画出线
ima->DrawLine(100,600,600,600,c,TRUE);//--
//ima->DrawLine(100,100,100,500,c,TRUE);
ima->DrawLine(500,500,100,500,c,TRUE);// _能画出线
//ima->DrawLine(100,200,200,500,c,TRUE);
ima->DrawLine(200,200,100,500,c,TRUE);*/
其它的都画不出线来,各位有没有用过的,指教指教....
void CxImage::DrawLine(int StartX, int EndX, int StartY, int EndY, COLORREF cr)
{
DrawLine(StartX, EndX, StartY, EndY, RGBtoRGBQUAD(cr));
}
北漂17载 2007-10-26
  • 打赏
  • 举报
回复
有bmp数据自己改像素点都来得及
aa65433 2007-10-25
  • 打赏
  • 举报
回复
只能画两根??是不是坐标不对的
AAAAAANWJ 2007-10-25
  • 打赏
  • 举报
回复
谢谢各位了,
程序写完了,第一步用CXimage得到像素点,比较.如果不同,则把坐标记录下来.
第二步将记下的坐标,利用之间的距离,划分出多个不相连的的CRGN.
第三步将区域画出.按画片显示的比例因子.画出矩形框.
现在还有一个问题,就是CXimage中有个DrawLine()这个函数在给图片画线时有点不好使。比如画四根线组成矩形,不知为什么只能画出两根线,有没有用过的高人找点一下。
蒋晟 2007-10-24
  • 打赏
  • 举报
回复
图像xor画一下得到不同的区域,然后再混合画到原图上
aa65433 2007-10-24
  • 打赏
  • 举报
回复
找到不同后将另一副图的相应位置的象素值改掉,再显示不就标记了么??
jhs1982419 2007-10-24
  • 打赏
  • 举报
回复
你说的一位一位是什么意思 ??
在图象处理里面我们都是对像素进行操作的
获得图象的宽度和高度后 用两个循环然后获得每副图象的灰度值
你逐个逐个像素进行比较 就行了

然后灰度值相减不为0就按你说的做就OK了
drowdrow 2007-10-23
  • 打赏
  • 举报
回复
直接相减,然后滤波。
新建一个同尺寸的蒙版数组,
将相减发现的不同标记出来
最后叠加显示就行了
mxm324 2007-10-23
  • 打赏
  • 举报
回复
这个问题一时半会是讲不清楚的。。最好去看看图像处理这方面的资料
Elysium 2007-10-23
  • 打赏
  • 举报
回复
gz
「已注销」 2007-10-23
  • 打赏
  • 举报
回复
简单的就是逐像素比较,可以设定一个阙值,在范围内的都是相同的,不同的你可以标记出来
最好把图像转化成灰度图来做
flyprogrammer 2007-10-23
  • 打赏
  • 举报
回复
找出不同的位,然后画轮廓。
cdsnpeter 2007-10-23
  • 打赏
  • 举报
回复
计算你需要标注的坐标,然后作画就是了。
加载更多回复(1)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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