OpenCV绘制图像的水平和竖直方向直方图
2015-09-02 12:19
381 查看
OpenCV中有求图像颜色直方图的函数,但是没有沿坐标轴的水平直方图统计的函数。 在实验室作项目的过程中,有时需要统计X,Y轴方向的水平直方图,通过水平直方图来寻找图像的阶跃点,写了一段代码与大家共享,水平有限,望大家指正。 编译平台:VS2010+OpenCV2.4.4 下面是求y轴直方图的一段代码:
#define imageshow 1 std::vector<unsigned int> pixel_sum; std::vector<unsigned int> row_num; //提取竖直方向直方图 unsigned int sum=0; for(unsigned int j=0;j<image.size().height;j++) { sum=0; for(unsigned int i=0;i<image.size().width;i++) { //这里特别注意at的第一个点是y坐标,第二个点才是横坐标 sum+=bw.at<uchar>(j,i); } pixel_sum.push_back(sum);//每行的像素值和存储 row_num.push_back(j);//行号存储 } #if imageshow //画直方图,背景应该是白的,直方图是黑的才对 unsigned int hist_height=300; cv::Mat hist_img(hist_height,row_num.size(),CV_8U,cv::Scalar(255)); //获取最大值和最小值 double maxVal=0; double minVal=0; //cv::minMaxLoc(pixel_sum,&minVal,&maxVal,0,0); maxVal=pixel_sum[0]; for(unsigned int i=0;i<pixel_sum.size();i++) { if(pixel_sum[i]>maxVal) maxVal=pixel_sum[i]; } unsigned int hpt=static_cast<unsigned int>(hist_height*0.9);//设置直方图绘制的最高点 for(unsigned int i=0;i<pixel_sum.size();i++) { unsigned int intensity=static_cast<unsigned int>(pixel_sum[i]/maxVal*hpt); //两点之间绘制一条直线 cv::line(hist_img,cv::Point(i,hist_height), cv::Point(i,hist_height-intensity), cv::Scalar::all(0)); } cv::namedWindow("hist_img",CV_WINDOW_AUTOSIZE); cv::imshow("hist_img",hist_img); cv::waitKey(0); #endif
试验中要统计y轴感兴趣区域的亮点分布,对一幅二值化图像做了直方图统计:
二值化后图像:
直方图:
相关文章推荐
- linux 防火墙
- shell 中嵌套expect 详解
- bash
- linux bash学习
- Linux相关资料
- 转:Jmeter--google plugin插件监控被测系统资源方法
- linux中printk的使用方法
- 标准的ALV模式中的表维护程序
- 向DataGrid、DropDownList控件添加数据
- openwrt手动恢复出厂设置
- 工业4.0在工业企业内实施的架构思考【一】
- apache-flume-1.5.0-bin windows
- linux命令:mkdir 命令详解
- Cloudera Hadoop 集群搭建(二)
- nginx使用笔记
- linux下jetty,tomcat中文乱码问题解决
- centos 一键安装lamp
- 架构对应的类型
- 操作系统性能监控-CPU使用率
- Ubuntu Linux 环境变量