设为首页 加入收藏

TOP

OpenCV中如何载入图像并且转换成灰度显示图像直方图
2014-11-24 02:31:52 来源: 作者: 【 】 浏览:0
Tags:OpenCV 如何 载入 图像 并且 换成 显示 方图

void histImage(IplImage* gray1,IplImage* histImg)
{
int histSize=255; //直方图针数
float range0[]={0,256}; //第0维数值变化范围
float * ranges[]={range0}; //第1维数值变化范围
int i,binW; //下标号
float maxValue,minValue; //直方图数值的max和min
int minIdx=0,maxIdx=0; //对应上述值时的下标号
CvHistogram * hist=cvCreateHist(1,&histSize,CV_HIST_ARRAY,ranges,1);//创建一个直方图
cvCalcHist(&gray1,hist,0,NULL);//计算直方图
cvGetMinMaxHistValue(hist,&minValue,&maxValue,&minIdx,&maxIdx);//得到最大最小值及其标号
//缩放最大值最小值以溶入图像
cvScale(hist->bins,hist->bins,((double)histImg->height)/maxValue,0);
cvSet(histImg,cvScalar(255),0);//把直方图画到图像中
for (i=0;i{
cvRectangle(histImg,cvPoint(i,histImg->height),
cvPoint(i+1,histImg->height-cvRound(cvGetReal1D(hist->bins,i))),cvScalarAll(0),1,8,0);//在histImg //图像中中画出直方图矩形
}
}
//这是一个可以被调用的函数,可以在main函数中调用它,传递两个IplImage类型的参数,gray1为输入的单通 //道的图像,histImg为输出的直方图图像。
int main()
{


int R,G,B,offset,max;
cvNamedWindow("origin");
cvNamedWindow("gray1");
cvNamedWindow("hist");
IplImage* cvLoadImage("图.jpg",-1); //载入彩色图像
IplImage* gray1=cvCreateImage(cvGetSize(src),src->depth,1);
IplImage * histImg=cvCreateImage(cvSize(255,200),IPL_DEPTH_8U,1);//用于存放直方图
IplImage* r=cvCreateImage(cvGetSize(src),src->depth,1);//存放红色图像
IplImage* g=cvCreateImage(cvGetSize(src),src->depth,1);//存放绿色图像
IplImage* b=cvCreateImage(cvGetSize(src),src->depth,1);//存放蓝色图像
cvSplit(src,b,g,r,NULL);//分割彩色的通道
for(int y=0;yheight;y++)//取三个通道中的最大值作为灰色图像的值
for(int x=0;xwidth;x++)
{
offset=y*g->widthStep+x;
R=(unsigned char )r->imageData[offset];
G=(unsigned char )g->imageData[offset];
B=(unsigned char )b->imageData[offset];
if (R>G && R>B) {
max = R;
}
else {
if (G>B) {
max = G;
}
else {
max = B;
}
}
gray1->imageData[offset]=max;
}
cvSmooth( gray1, gray1, CV_BLUR , 3, 3 );//去噪
histImage(gray1,histImg);
cvShowImage("hist",histImg);
cvShowImage("origin",src);
cvShowImage("gray1",gray1);
while(1){if((cvWaitKey(10)&0x7f)==27)break;}
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&histImg);
cvReleaseImage(&gray1);
return 1;
}


最后的结果如下图所示:



原始图像



灰度图像



图像直方图


初步涉及OpenCV,希望继续努力,不断的进步,能出更多更好的代码和知识跟大家分享。


推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenCV 绘制直方图 下一篇OpenCV 数字图像灰度直方图

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: