如何比较图片的差异?思路即可,无须代码.

terran_ye 2008-08-08 09:44:33
在做远程桌面协助,
现在的思路双方建立P2P的连接,然后再每隔1秒截屏,比较前后2次图片的变化的地方,再把变化的地方发送过去

可是如何才能最快的大体比较出2个图片的差异?  效率,时间.

谢谢,答者有分.
...全文
1318 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mlhy20060406 2009-04-22
  • 打赏
  • 举报
回复
mark
terran_ye 2008-08-27
  • 打赏
  • 举报
回复
是的,我参考了VNC的代码,用钩子做,在LAN很快,WAN上就不怎么理想,有些局部的位置没有刷新,
用mirror driver的话,貌似不支持dirctx 3d。
terran_ye 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 aa65433 的回复:]
引用 16 楼 terran_ye 的回复:
引用 15 楼 aa65433 的回复:
服务端只管发整图,到客户端比较不同,分块比较,然后刷不同


发整图数据量超大,我现在的demo,在局域网内传送1秒截图一次,其中处理的时间就用了0.3秒多,debugview看的


保存上一张图片,抓到一张新图后,在内存中按块用memcmp比较,如果发现有不同,就发送此块,然后到客户端组装起来
[/Quote]


是的,我现在就是这么写的,在考虑mirror driver
aa65433 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 terran_ye 的回复:]
引用 15 楼 aa65433 的回复:
服务端只管发整图,到客户端比较不同,分块比较,然后刷不同


发整图数据量超大,我现在的demo,在局域网内传送1秒截图一次,其中处理的时间就用了0.3秒多,debugview看的
[/Quote]

保存上一张图片,抓到一张新图后,在内存中按块用memcmp比较,如果发现有不同,就发送此块,然后到客户端组装起来
ljooo 2008-08-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzz3265 的回复:]
比较直接用 memcmp , 10M以内的数据不会超过 1毫秒

当然你不能用 GetPix, GetPix非常慢, 应该直接取出内存块来比较,


图像压缩可以把前后两幅图像相减, 再找个压缩算法压缩相减的结果
另外一边只要加上这个结果就是新的图像
[/Quote]

我也觉得简单的比较不会超过1毫秒。你可以考虑把你的比较代码贴出来
wangk 2008-08-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 terran_ye 的帖子:]
在做远程桌面协助,
现在的思路双方建立P2P的连接,然后再每隔1秒截屏,比较前后2次图片的变化的地方,再把变化的地方发送过去

可是如何才能最快的大体比较出2个图片的差异?  效率,时间.

谢谢,答者有分.
[/Quote]

请参考请他VNC开源项目。
它们通常是安装钩子监视屏幕区域的变化,然后压缩传送变化的图片区。
用判断图像变化的办法效率太低,很少被使用。
terran_ye 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzz3265 的回复:]
比较直接用 memcmp , 10M以内的数据不会超过 1毫秒

当然你不能用 GetPix, GetPix非常慢, 应该直接取出内存块来比较,


图像压缩可以把前后两幅图像相减, 再找个压缩算法压缩相减的结果
另外一边只要加上这个结果就是新的图像
[/Quote]

我现在把屏幕的截图,按 16 :12的比例分成了192快,
用 GetDIBits 得到小快的图形数据然后比较,不一样则发送,效率还不是很好,

发送的时候我先转为jpg 然后再发送,也不理想感觉,
你提到的图象压缩算法很有意思,试试先.

多谢大家

terran_ye 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 aa65433 的回复:]
服务端只管发整图,到客户端比较不同,分块比较,然后刷不同
[/Quote]

发整图数据量超大,我现在的demo,在局域网内传送1秒截图一次,其中处理的时间就用了0.3秒多,debugview看的
aa65433 2008-08-19
  • 打赏
  • 举报
回复
服务端只管发整图,到客户端比较不同,分块比较,然后刷不同
terran_ye 2008-08-19
  • 打赏
  • 举报
回复
老大给我个思路,用mirror driver,大家可有这方面的demo?
ok1234567 2008-08-19
  • 打赏
  • 举报
回复
可以试试:
在被控方保存上幅图像(已经传送的)
截取新图,与上幅图进行异或运算(可以提高下步的压缩比)
用zlib压缩
然后发送

主控端作相应处理

最好不要使用gif,jpg,直接用位图
csgdseed 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 orbit 的回复:]
将屏幕分成固定的若干小块,对其分别编号,分块比较,每次只传送发生改变的块
[/Quote]
这个比较好吧
bitxinhai 2008-08-08
  • 打赏
  • 举报
回复
可以通过两幅图像的彩色信息,灰度信息,直方图信息和一些其他的特征
进行比较两幅图像的差异!!!
daidongsheng 2008-08-08
  • 打赏
  • 举报
回复
把图片编码后传过来解码也行的吧
闪破风浪 2008-08-08
  • 打赏
  • 举报
回复
你是做图像的鉴定还是干嘛呀??????
stivenjia 2008-08-08
  • 打赏
  • 举报
回复
我只知道逐个像素比较
「已注销」 2008-08-08
  • 打赏
  • 举报
回复
即使使用逐像素的比较,1S也足够了。
比较的时候使用异或应该能加快点速度
吹泡泡的小猫 2008-08-08
  • 打赏
  • 举报
回复
将屏幕分成固定的若干小块,对其分别编号,分块比较,每次只传送发生改变的块
Yofoo 2008-08-08
  • 打赏
  • 举报
回复
比较直接用 memcmp , 10M以内的数据不会超过 1毫秒

当然你不能用 GetPix, GetPix非常慢, 应该直接取出内存块来比较,



图像压缩可以把前后两幅图像相减, 再找个压缩算法压缩相减的结果
另外一边只要加上这个结果就是新的图像
可微函树 2008-08-08
  • 打赏
  • 举报
回复
考虑效率就要对图像降采样,小波处理 处理速度不是问题 短时间内能实现传输传输是问题的关键
加载更多回复(2)

19,468

社区成员

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

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