OpenCV 在MFC中二值化
来源:互联网 发布:五轴编程视频 编辑:程序博客网 时间:2024/05/01 02:35
参考的是书上例7-1.
原代码是获取H-S二维直方图,我在这里改成了获取RGB以及灰度图的一维直方图。代码如下:
首先,要获取分别的直方图,必须将原图片按通道分开,因此,创建四个IplImage,depth为8,然后进行图像转换。
IplImage* r_plane = cvCreateImage(cvGetSize(src),8,1);IplImage* g_plane = cvCreateImage(cvGetSize(src),8,1);IplImage* b_plane = cvCreateImage(cvGetSize(src),8,1);IplImage* gray_plane = cvCreateImage(cvGetSize(src),8,1);cvCvtPixToPlane(src,b_plane,g_plane,r_plane,0);cvCvtColor(src,gray_plane,CV_BGR2GRAY); //OpenCV中不管是Windows中Load的还是摄像头取得的都是BGR顺序排列的
然后为这四幅图创建对应的直方图结构。
int hist_size = 100;int hist_height = 100;float range[] = {0,255};float* ranges[]={range};CvHistogram* r_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);CvHistogram* g_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);CvHistogram* b_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);
接下来计算直方图,创建用于显示直方图的图像,略去了一部分重复代码,以下也是。
cvCalcHist(&gray_plane,gray_hist,0,0);cvNormalizeHist(gray_hist,1.0);int scale = 2;IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height*4),8,3);cvZero(hist_image);
然后开始显示,这里对直方图进行了标准化处理,不然的话无法观察到明显的变化。
float max_value = 0;cvGetMinMaxHistValue(r_hist, 0,&max_value,0,0);for(int i=0;i<hist_size;i++){ float bin_val = cvQueryHistValue_1D(r_hist,i); int intensity = cvRound(bin_val*hist_height/max_value); cvRectangle(hist_image,cvPoint(i*scale,hist_height-1),cvPoint((i+1)*scale - 1, hist_height - intensity),CV_RGB(255,0,0));}
最后只要显示出来就可以了。出结果图的时候我并不知道自己的结果是不是正确,于是把图片用Photoshop打开,然后看色阶。结果发现红和蓝的直方图是反的,这才发现,自己在拆分通道的时候写的是rgb而不是bgr。改过来之后就对了。
- OpenCV 在MFC中二值化
- 在MFC中使用OpenCV
- 在MFC下运行OpenCV
- 在MFC中使用OpenCV
- OpenCV在MFC中的使用
- 在VS2008使用MFC+Opencv
- opencv在mfc中的应用
- 在MFC上显示OPENCV
- Opencv在MFC中显示图片
- Opencv在MFC静态库的配置
- Opencv ImlImage 在MFC中显示
- 在mfc中用opencv显示视频
- opencv在mfc界面嵌入式显示图像
- 使用OpenCV在MFC中显示图像
- 在MFC中显示opencv图像
- 利用OPENCV在MFC里添加图片
- OPENCV Mat图像在MFC PictureControl显示
- 【在 MFC 框架中,OpenCV与MFC窗口绑定方法】
- DB2数据库的基础学习
- log4j配置祥解
- 关于poky中.conf文件=, ?=, ??=的区别
- .net Word 操作 不要安装Microsoft Office
- asp.net指定GridView 导出Excel
- OpenCV 在MFC中二值化
- jquery的$.each() 和$("div").each() 区别
- 可打三维模型 Solidoodle推低价3D打印机
- jquery遍历json的方法
- 关于iphone里类名前缀的说明
- Pricing for Commission agent
- 如果痛苦 不如摘下面具
- 【c++算法】stringsplit
- backtrack5虚拟机安装