OpenCV:绘制图像的BGR三通道直方图
2015-02-11 15:26
363 查看
<span style="font-size:14px;">#include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\cxcore.h> IplImage* DrawHistogram(CvHistogram* hist, float scaleX = 1, float scaleY = 1){ float histMax = 0; cvGetMinMaxHistValue(hist, 0, &histMax, 0, 0); //获取直方图的最大值 IplImage* imageHist = cvCreateImage(cvSize(256*scaleX, 64*scaleY), 8, 1); cvZero(imageHist); for(int i = 0; i < 255; ++i){ //查询直方图每个单位的x值对应的y值 float histValue = cvQueryHistValue_1D(hist, i); float nextValue = cvQueryHistValue_1D(hist, i+1); CvPoint pt1 = cvPoint(i* scaleX, 64*scaleY); CvPoint pt2 = cvPoint((i+1)*scaleX, 64*scaleY); CvPoint pt3 = cvPoint((i+1)*scaleX, 64*scaleY - (nextValue/histMax)*64*scaleY); CvPoint pt4 = cvPoint(i*scaleX, 64*scaleY - (histValue/histMax)*64*scaleY); int numPts = 5; CvPoint pts[5]; pts[0] = pt1; pts[1] = pt2; pts[2] = pt3; pts[3] = pt4; pts[4] = pt1; //通道直方图为连续的,所以填充两两相邻直方柱之间区域 cvFillConvexPoly(imageHist, pts, numPts, cvScalar(255)); } return imageHist; } int main(int argc, char** argv){ IplImage *src = cvLoadImage(".\\test1.png"); cvNamedWindow("src"); cvShowImage("src", src); int dims = 1; int size = 256; float range[] = {0, 255}; float *ranges[] = {range}; CvHistogram * hist; hist = cvCreateHist(dims, &size, CV_HIST_ARRAY, ranges, 1); //创建直方图 cvClearHist(hist); //清除直方图 IplImage* imageRed = cvCreateImage(cvGetSize(src), 8, 1); IplImage* imageGreen = cvCreateImage(cvGetSize(src), 8, 1); IplImage* imageBlue = cvCreateImage(cvGetSize(src), 8, 1); //将源图像分割出RGB三通道 cvSplit(src, imageBlue, imageGreen, imageRed, NULL); cvCalcHist(&imageBlue, hist, 0, 0); //根据Blue通道计算直方图 IplImage* histBlue = DrawHistogram(hist, 1, 1); cvClearHist(hist); cvCalcHist(&imageGreen, hist, 0, 0); IplImage* histGreen = DrawHistogram(hist, 1, 1); cvClearHist(hist); cvCalcHist(&imageRed, hist, 0, 0); IplImage* histRed = DrawHistogram(hist, 1, 1); cvClearHist(hist); cvNamedWindow("B"); cvNamedWindow("G"); cvNamedWindow("R"); cvShowImage("B", histBlue); cvShowImage("G", histGreen); cvShowImage("R", histRed); cvWaitKey(0); }</span>
运行结果:
相关文章推荐
- OpenCV绘制直方图,B G R三通道的
- Opencv学习笔记——绘制图像的像素直方图
- OpenCV绘制图像的水平和竖直方向直方图
- opencv学习之(五)-直方图计算和绘制图像直方图
- OpenCV之单通道图像的直方图绘制
- opencv图像直方图的计算及绘制
- Opencv绘制灰度/彩色图像的直方图及直方图的均衡化实例及源代码
- OpenCV入门(二十一)-- 绘制彩色图像的直方图
- OpenCV学习笔记7_ImageToBGR_彩色图像三通道转化成BGR3幅单通道图像
- opencv 图像直方图绘制
- OpenCV-绘制图像的像素直方图-Histogram
- OpenCV 2 学习笔记(15): 绘制图像直方图
- 【OpenCV3图像处理】统计图像的直方图 ,绘制直方图
- OpenCV绘制图像的水平和竖直方向直方图
- OpenCV读取摄像头显示原图像和RGB三通道直方图
- opencv 绘制三通道的直方图
- opencv3 绘制BGR三色直方图
- opencv 绘制三通道的直方图
- opencv3 绘制BGR三色直方图-柱状图
- opencv 绘制图像直方图