【练习7.1】cvCreateHist创建直方图、cvCalcHist计算直方图、cvQueryHistValue_1D访问直方图及右左法则
2015-05-06 22:11
465 查看
题目要求 |
程序代码 |
结果图片 |
要言妙道 |
在0~1之间生成1000个随机值,定义bin的大小为10,并建立一个直方图
a、输出每个bin中的数据
程序代码:
// OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。 // //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <iostream> #include <opencv2/legacy/legacy.hpp> //#pragma comment(lib, "opencv_legacy2411.lib") using namespace cv; using namespace std; //函数声明-->--->-->--->-->--->-->--->// //<--<--<--<--<--<--<--<--<--函数声明// int _tmain(int argc, _TCHAR* argv[]) { CvRNG rng; rng = cvRNG(cvGetTickCount()); IplImage* src = cvCreateImage(cvSize(10, 100), IPL_DEPTH_32F, 1); for (int i = 0; i < 1000; ++i) { double value = cvRandReal(&rng); cvSetReal1D(src, i, value); } int dims = 1; int sizes[1] = { 10 }; int type = CV_HIST_ARRAY; float arr[] = { 0.0f, 1.0f }; float * rangs[] = { arr }; CvHistogram *histogram = cvCreateHist(dims, sizes, type, rangs, 1); cvCalcHist(&src, histogram); float sum = 0.0f; for (int i = 0; i < 10; ++i) { float value = cvQueryHistValue_1D(histogram, i); cout << value << endl; } system("pause"); cvWaitKey(); cvReleaseImage(&src); cvDestroyAllWindows(); rangs = NULL; return 0; } void DrawHistogram(IplImage * image_hist, const CvHistogram * histogram) { }
结果图片:
① cvWaitKey(); 只有在之前调用该cvShowImage后才会等待,如果之前的代码没调过,则必须用 system("pause"); 才能暂停下来。但是,如果代码中有cvShowImage的操作,在 cvWaitKey(); 前一定不能使用 system("pause"); ,不然程序一直会暂停那里,鼠标一直转圈,显示不出图片
②cvCreateHist的参数sizes即直方图的大小,相当于直方图包含元素的个数,如果是二维直方图,即直方图大小为2,包含两个一维直方图。sizes必须为整型数组,数组长度等于直方图的维数,数组中每一个整数表示分配给对应维数的bin的个数,例如直方图为一维,sizes必须为只包含一个整型元素的数组,该元素的值即为直方图bin的个数
③cvCreateHist的参数ranges是指向指针的指针,即二维数组,第一维的长度应等于bin的个数,第二维代表各个bin的的范围或分段情况,对于均匀直方图,第二维便是最小值和最大值组成的两个元素的数组;对于有N个bin的非均匀直方图,第二维是由N+1个元素组成的分段情况,例如本题如果使用非均匀可以是{0.0,0.14,0.25,0.31,0.29,0.55,0.60,0.66,0.79,0.82,1.0},这第二维工11个数,相邻的两个数代表一个bin的范围,这样若干个一维数组合成一个二维数组,本题的若干个=1个
④根据右左法则以 float * rangs[] 为例,rangs是一个数组,数组元素的类型为指针,指针式指向float的指针,其实这一点使用 float rangs[] 更容易理解,rangs是一个数组,数组元素是float型。
⑤cvCalcHist计算直方图即根据直方图的参数,算出落在每个bin中数量
⑥cvQueryHistValue_1D等函数即获取各个bin中元素的数量
相关文章推荐
- opencv直方图创建CreateHist、计算cvCalcHist和访问的汇总
- OpenCv计算直方图cv::calcHist
- 【练习7.3】从直方图创建signature、计算两个直方图的EMD距离
- opencv 计算直方图 calcHist()
- 计算图像直方图方法,纠正calcHist调用错误(OpenCV)
- 【练习7.2】直方图归一化cvNormalizeHist、匹配cvCompareHist及各种匹配方法
- calcHist()计算图像直方图opencv
- OpenCV【4】---calcHist 计算图像的直方图
- DirectX 3D_基础之地形绘制基础 高度图 创建高度图 加载RAW文件 访问和修改高度图 创建地形的几何信息(顶点计算,索引计算,纹理映射,光照,着色,地形中行走)
- OpenCV 直方图计算函数 calcHist源码深度剖析
- 关于opencv直方图计算函数 calcHist()的channels参数的理解
- (转)CvMakeHistHeaderForArray cvCreateHist
- opencv学习(三十七)之图像直方图计算calcHist()
- 【Opencv】【C++】 Opencv之calcHist() 计算直方图
- 【练习8.1】查找轮廓、寻找关键点cvFindDominantPoints、访问序列中的元素
- 【Python OpenCV】图像直方图 calcHist方法 equalizeHist方法
- opencv中直方图均衡函数cv::equalizeHist()的使用!!严格用程序进行了验证!
- 【练习7.6】漫水填充获取掩码并以此计算肤色直方图、用以查找肤色区域即颜色识别
- 《学习OpenCV》第七章直方图(练习7.1)
- 【opencv练习28 - 直方图计算】