opencv 3版本中 cvQueryHistValue_1D 函数问题
2018-03-09 12:19
399 查看
最近在用opencv画直方图时,按照书上的例子程序,发现opencv 3 版本中没有cvQueryHistValue_1D这个函数,但是在以前的版本中都是有的,查看网上的解决方法是写一个宏,程序在下面:
#include "stdafx.h"
#include "highgui.h"
#include "cv.h"
#define cvQueryHistValue_1D( hist, idx0 ) \
((float)cvGetReal1D( (hist)->bins, (idx0)))
int size = 255 ;
float range[] = { 0,255 }; float* ranges[] = { range };
//画直方图函数
IplImage* draw_hist_img(CvHistogram* hist, float scaleX, float scaleY) {
float histMax = 0;
cvGetMinMaxHistValue(hist, 0, &histMax, 0, 0);
IplImage* hist_img = cvCreateImage(cvSize(255 * scaleX, 64 * scaleY), 8, 1);
cvZero(hist_img);
for (int i = 0; i < size; i++)
{
float histvalue = cvQueryHistValue_1D(hist, i);
int intensity = cvRound(histvalue * 255 / histMax);
cvRectangle(hist_img,
CvPoint(i*scaleX, 64 * scaleY),
CvPoint((i + 1)*scaleX, (1 - histvalue / histMax) * 64 * scaleY), CvScalar(255),
CV_FILLED, 8, 0);
}
return hist_img;
}
int main() {
IplImage* img = cvLoadImage("H:\\3.jpg", 1);
//将BGR分解成三个单通道图像
IplImage* b_img = cvCreateImage(cvGetSize(img), 8, 1);
IplImage* g_img = cvCreateImage(cvGetSize(img), 8, 1);
IplImage* r_img = cvCreateImage(cvGetSize(img), 8, 1);
cvSplit(img, b_img, g_img, r_img, 0);
//创建三个直方图
CvHistogram* b_hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
CvHistogram* g_hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
CvHistogram* r_hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
cvClearHist(b_hist); cvClearHist(g_hist); cvClearHist(r_hist);
//计算三个直方图
cvCalcHist(&b_img, b_hist, 0, 0);
cvCalcHist(&g_img, g_hist, 0, 0);
cvCalcHist(&r_img, r_hist, 0, 0);
//画三个直方图
IplImage* b_hist_img = draw_hist_img(b_hist, 2, 2);
IplImage* g_hist_img = draw_hist_img(g_hist, 2, 2);
IplImage* r_hist_img = draw_hist_img(r_hist, 2, 2);
//显示
cvShowImage("原图", img);
cvShowImage("B_HIST",b_hist_img);
cvShowImage("G_HIST", g_hist_img);
cvShowImage("R_HIST", r_hist_img);
cvWaitKey(0);
return(0);
}
#include "stdafx.h"
#include "highgui.h"
#include "cv.h"
#define cvQueryHistValue_1D( hist, idx0 ) \
((float)cvGetReal1D( (hist)->bins, (idx0)))
int size = 255 ;
float range[] = { 0,255 }; float* ranges[] = { range };
//画直方图函数
IplImage* draw_hist_img(CvHistogram* hist, float scaleX, float scaleY) {
float histMax = 0;
cvGetMinMaxHistValue(hist, 0, &histMax, 0, 0);
IplImage* hist_img = cvCreateImage(cvSize(255 * scaleX, 64 * scaleY), 8, 1);
cvZero(hist_img);
for (int i = 0; i < size; i++)
{
float histvalue = cvQueryHistValue_1D(hist, i);
int intensity = cvRound(histvalue * 255 / histMax);
cvRectangle(hist_img,
CvPoint(i*scaleX, 64 * scaleY),
CvPoint((i + 1)*scaleX, (1 - histvalue / histMax) * 64 * scaleY), CvScalar(255),
CV_FILLED, 8, 0);
}
return hist_img;
}
int main() {
IplImage* img = cvLoadImage("H:\\3.jpg", 1);
//将BGR分解成三个单通道图像
IplImage* b_img = cvCreateImage(cvGetSize(img), 8, 1);
IplImage* g_img = cvCreateImage(cvGetSize(img), 8, 1);
IplImage* r_img = cvCreateImage(cvGetSize(img), 8, 1);
cvSplit(img, b_img, g_img, r_img, 0);
//创建三个直方图
CvHistogram* b_hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
CvHistogram* g_hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
CvHistogram* r_hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
cvClearHist(b_hist); cvClearHist(g_hist); cvClearHist(r_hist);
//计算三个直方图
cvCalcHist(&b_img, b_hist, 0, 0);
cvCalcHist(&g_img, g_hist, 0, 0);
cvCalcHist(&r_img, r_hist, 0, 0);
//画三个直方图
IplImage* b_hist_img = draw_hist_img(b_hist, 2, 2);
IplImage* g_hist_img = draw_hist_img(g_hist, 2, 2);
IplImage* r_hist_img = draw_hist_img(r_hist, 2, 2);
//显示
cvShowImage("原图", img);
cvShowImage("B_HIST",b_hist_img);
cvShowImage("G_HIST", g_hist_img);
cvShowImage("R_HIST", r_hist_img);
cvWaitKey(0);
return(0);
}
相关文章推荐
- 解决VS+opencv中Debug版本与Release版本lib切换的问题
- OpenCV 3.1 imwrite()函数写入异常问题解决方法
- opencv版本较高引起的兼容问题
- opencv 鼠标操作SetMouseCallback()函数传递用户定义参数的问题
- 解决Opencv高低版本不兼容问题
- 【OpenCV学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之cvCaptureFromCAM()的索引问题
- tensorboard 版本1.0后可视化函数变化问题
- 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)
- 解决VS+opencv中Debug版本与Release版本lib切换的问题
- Opencv 里的solvePnP函数使用问题
- 【技术】OpenCV入门:3.1.0版本中的imread()函数flag参数
- jQuery1.9+ 废弃的函数和方法 升级Jquery版本遇到的问题
- OpenCV的imread函数加载图像的完整路径问题
- jQuery1.9+ 废弃的函数和方法 升级Jquery版本遇到的问题
- 【OpenCV配置之一】更新OpenCV SDK版本问题
- 解决OpenCV的imread函数无法读取中文路径和中文命名的文件的问题。
- 解决VS+opencv中Debug版本与Release版本的lib切换的问题
- ROS知识(12)----cv_bridge依赖opencv版本的问题
- OpenCv函数cvLoadImage的使用问题总结
- 关于CreateProcess 函数的两种版本问题