从文件中读入bmp图像,然后显示直方图,怎么做?
我开始是把图像显示出来,然后用GetPixel一个一个点读取,但这样太慢,要好久才能显示出来。并且我不想把图像显示出来。
用CFile读取数据,一个一个像素读取,也很慢
要怎么做呢?谢谢
问题点数:50、回复次数:11Top
1 楼pengcyu(cpp)回复于 2005-12-27 14:41:26 得分 0
各位兄弟姐妹帮忙啊Top
2 楼aa3000(杀手K)回复于 2005-12-27 15:13:20 得分 5
什么意思,不明白。请说清楚一点Top
3 楼pengcyu(cpp)回复于 2005-12-27 15:20:59 得分 0
就是通过文件对话框打开一幅位图,然后显示灰度直方图,要怎么做Top
4 楼happyparrot(快乐鹦鹉)回复于 2005-12-27 15:31:46 得分 5
你上书店借一本VC++图像处理方面的书看一下,都会告诉你如何显示灰度直方图,源代码都有,抄一下就行了。顺便自己再吸收一下。Top
5 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-12-27 15:37:28 得分 5
http://www.yesky.com/20021224/1645640.shtmlTop
6 楼thisisll(学习王高李,有个好身体)回复于 2005-12-27 17:10:03 得分 5
用CFile读取数据,一个一个像素读取,也很慢
你把数据放到内存里(如果不是很大的图片的话)就快了
我看的书上就是一个一个像素的统计的Top
7 楼rocklabzhang()回复于 2005-12-27 17:37:03 得分 10
把像素数据读入到内存中,一个一个的统计就是了。lpData是指向像素的指针。
float a[256];
for(int i=0;i<256;i++)
{
a[i]=0;
}
for(DWORD y=0;y<nHeight;y++)
{
for(DWORD x=0;x<nWide;x++)
a[*(lpData+y*nWide+x)]++;
}
Top
8 楼arvid_gs(west)回复于 2005-12-28 21:13:45 得分 5
一个象素取肯定慢了,
读到内存里面用位图直接读取 每个点的 r , g ,b
然后用直方图算法计算就可以了!Top
9 楼strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)回复于 2005-12-30 17:09:45 得分 5
private void GetHist()
{//Get histogram of the image
long i = 0, len = bmp.Width * bmp.Height;
for(; i<256; ++i)
rDensity[i]=gDensity[i]=bDensity[i]=0;
for(i = 0; i < len; ++i)
{
rDensity[r[i]]++;
gDensity[g[i]]++;
bDensity[b[i]]++;
}
}
Top
10 楼marstone(marstone)回复于 2005-12-30 20:37:56 得分 5
就得逐个读吧,时间复杂度O(n)恐怕没法提高了Top
11 楼xianshiqi(日出西山)回复于 2005-12-31 14:49:42 得分 5
用GetPix()肯定慢的,你打开位图时,没有获得指向数据的指针吗,用指针就方便多了,直接在内存中取值,可以不用显示图像,直接显示直方图,Top




