图像直方图统计,用c++如何编写?简单0-255的我会,要是int 类型呢?

补充:因为数据是int类型,所以灰度值在0~65535之间。... 补充:因为数据是int类型,所以灰度值 在0~65535 之间。 展开
 我来答
科技程序迷
2012-10-19 · TA获得超过2822个赞
知道大有可为答主
回答量:2240
采纳率:0%
帮助的人:1853万
展开全部

想知道图像的亮度分布信息?

图像的像素点总数为count=width*height

创建一个大小为count的整型数组Grays

开始遍历图像的像素,获取像素的灰度值,然后放入Grays数组,一直遍历完整个图像。

如果你要显示这个直方图,在内存中创建一个宽300高256的图像buffer,然后在buffer里面绘制直方图,应为count可能很大,所以得采用抽样扫描Grays的灰度数据,比如步长是count/300宽,g=Grays[count/300];然后在buffer绘制垂直线段drawLine(i,256,i,255-g),因为是反过来绘制线段来表示的。绘制完之后draw到屏幕组件。就像Photoshop的那个直方图吧、

更多追问追答
追问
哦,说的很详细。比如我的图像是 unsigned short 类型,直方图数组我要开个hist[65536]大小,才能包含所有灰度值,而不是简单的hist[256]。要是double类型的图像,那开的数组要更大,所以有没有好的解决方法,那些具有直方图统计功能的软件,处理速度都很快,我觉得他们有自己的设计方法,而不是简单的开大数组,是不是呢?
追答
是的,不过也不知他们怎么设计的算法那么高效率,用多线程分割任务?
不太明白你所说的这种图像是什么格式,应该不是RGB吧
chiconysun
推荐于2018-05-09 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2613万
展开全部
灰度一般只是0~255吧,不会是0~65535
当然,即使是,也可以同样借用这个256级灰度的标志数组方法,数组元素改为65536,这个数组就一般是动态分配的了
还有第二个办法,可以用C++ 的map,当然,这个性能比数组直接累加统计要慢一点
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友26ad406
2012-10-18 · TA获得超过1611个赞
知道大有可为答主
回答量:1506
采纳率:100%
帮助的人:1084万
展开全部
你要是已经把图像个点像素值读入,直接遍历就行了,a[256],初值设为0,遍历每个像素,如果值是i,则a[i]+1;其实最麻烦的是读入图像的类
追问
a[256] ?,不能这样啊,因为像素值不是0~255,是int类型,可能是3000,这样就不好开内存了,该怎么做呢?
追答
图像的灰度值肯定是0-255
假设你做的不是图像直方图,那就把数组弄大点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-11
展开全部
按比例,缩减到0-255之间

~
~
~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式