| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2364 人关注过本帖
标题:挑战图像数据处理
只看楼主 加入收藏
hotcls
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-31
收藏
 问题点数:0 回复次数:15 
挑战图像数据处理
请看附件,把后缀名改为res
一个文件以16进制读取,统计其中每个word的个数。
如56 78 56 e6 78 56
其中56 78 1个
56 e6 1个
78 56 1个
其中78 56就不要算成2个.
我做这个程序的目的是:
有一个res文件里存储了许多bmp文件的位图数据,不包括位图信息,也就是那54个字节。当然,按顺序储存。
我就是要利用图片像素与周围像素的过渡性,找出res文件里各个bmp文件的分割点,还有各个bmp文件的高和宽。
参考http://www.newsmth.net/bbstcon.php?board=Graphics&gid=47754
lWhiBnM0.txt (3.13 KB) 挑战图像数据处理


搜索更多相关主题的帖子: 数据处理 图像 bmp 文件 像素 
2007-08-06 15:09
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
也就是在一个只有数据而没头信息的BMP集合中把每幅BMP提取出来是吧,我很好奇什么工具会把BMP导出成这种格式。
利用BMP图片各自本身的相似度倒是这办法,但肯定不准确,比如一幅老外的三色国旗图片,可能会因此被当成三幅图片提取出来。
如果里面的图片宽度都不相同,至少是两张之间的宽度都不相同,我觉得可以利用BMP的4倍对齐这一特点,也就是BMP宽必须为4的倍数,否则补成4的倍数,应该能得到图形的边界,这样提取到每一行,一直提取到补齐数发生改变时,就应该到了下一幅位图的数据区了。这个只是一个想法,能不能行我还没仔细想,它的局限性就是当两幅连接在一起的BMP是一样宽时,会将其辩认为一幅。
2007-08-06 16:18
hotcls
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-31
收藏
得分:0 
把后缀名改为exe.
呵呵,开眼界了吧,就有这样的工具。
4倍对齐,不一定吧。
f6UerQKT.rar (407.5 KB) 挑战图像数据处理



http://user.qzone./526044268
2007-08-06 19:52
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
如果我没看错的话,貌似这个工具是将BMP转成资源文件的啊,它有反转换功能吗?
2007-08-07 08:48
hotcls
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-31
收藏
得分:0 
我要做的工作就是把资源文件反转过来啊。

http://user.qzone./526044268
2007-08-07 09:01
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 

哦,我以为你发的是反转过来的程序。

2007-08-07 10:14
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
我试过了,当图片原来的宽度不是4的倍数时,可以利用对齐来取得图片的原宽和原高,结果还是很精确的。但图片宽度是4的倍数时,就不能这么处理,可能就涉及到特征识别了。因此可以将这个方案综合考虑进去,这样能提高整体的提取正确率。
2007-08-07 11:19
hotcls
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-7-31
收藏
得分:0 
当图片原来的宽度不是4的倍数时,可以利用对齐来取得图片的原宽和原高 搞不懂。
能把你的程序给我看看吗?

http://user.qzone./526044268
2007-08-07 15:34
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
如果你要处理的数据文件仅仅是去掉了54字节头信息的情况,以4倍对齐特性找边界才有效。
4位对齐原则是这样的,当BMP的宽度不为4的倍数时,以0补齐直到成为4的倍数,譬如图片色深为16位,宽为219像素,每一行像素的最后会补上一个字节使整行宽为220像素,这样就是4的倍数了,此时这些被补上去的0可以视为图片的“边界”。我的想法是如果图片本身内容不为全黑(即所有字节都为0),就可以扫描一遍数据区,扫描它里面每个0值之间的间隔,拿刚才的219为例(我实验过的图片之一),得到的所有间隔值里219占了绝大多数(因为图片中间会有点像素为黑即0,否则就全是219),你可以统计间隔里出现次数最多的非0间隔(我统计得到的是219),这就是图片原来的宽度,有了宽度为基础,高度(行数)也可以算出来,理想状态下也就是图片中没有一个黑点即0值,图片的高就等于所有的219个数加1,如果有也不要紧,可以将小于219的值累加直到宽度219,视为一行,这样一来,最后的宽和高都确定下来了,图片也就可以恢复头信息了。
这个方法有它的局限性:
图片的原宽度不能为4的倍数,否则不会以0补齐,也就没有“边界”了;
图片的色深应该是已知的,否则还要推算图片的色深,不过这应该可以做到;
图片不能全为黑色,否则“边界”和有效像素无法区分开来。
此思路只能视为一个补充方案,具体的实现也不一定就是我说的那个样子,具体对你那个问题能否有用也不好说,只是单独拿出来做的话是的确可以实现的。
另,由于代码是在上班时偷闲写的,很乱,就不献丑了。
2007-08-07 16:58
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
讨论这个问题似乎没有多大意义
要完整的描述一个二维图像,图像的宽高是必不可少的,至少都需要知道宽度。
这样的问题在设计时就犯了严重的错误,因此没有继续讨论和实现的必要。
2007-08-07 20:03
快速回复:挑战图像数据处理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028645 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved