#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
/**************************最大值法灰度化****************************************/
/*IplImage * RGBtoGRAYTmax(IplImage *in,IplImage *out)
{
for (int y=0;y<in->height;y++)
{
uchar *ptr=(uchar*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
if(ptr[3*x]>ptr[3*x+1])
out->imageData[y * in->width+ x]=ptr[3*x];
else out->imageData[y * in->width + x]=ptr[3*x+1];
if(ptr[3*x+2]>in->imageData[x])
out->imageData[y * in->width + x]=ptr[3*x+2];
}
}
return(out);
}
//*************************平均值法灰度化********************************
IplImage * AveGRAY(IplImage*in,IplImage*out)
{
for (int y=0;y<in->height;y++)
{
char *p=(char*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
out->imageData[y*in->width+x]=(p[3*x]+p[3*x+1]+p[3*x+2])/3;
}
}
return(out);
}
//***********************加权平均法灰度化*******************************
IplImage * JIAQUANGRAY(IplImage*in,IplImage*out)
{
for(int y=0;y<in->height;y++)
{
char *p=(char*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
out->imageData[y*in->width+x]=(p[3*x]*11+p[3*x+1]*59+p[3*x+2]*30)/100;
//out->imageData[y*in->width+x]=p[3*x]*0.11+p[3*x+1]*0.59+p[3*x+2]*0.30;
//out->imageData[y*in->width+x]=p[3*x]*0.072169+p[3*x+1]*0.715160+p[3*x+2]*0.212671;
}
}
return(out);
}
int main()
{
IplImage * p=cvLoadImage("D:\\地下车库\\117\\1.jpg",1);
IplImage *c=cvCreateImage(cvGetSize(p),IPL_DEPTH_8U,1);
IplImage *b=cvCreateImage(cvGetSize(p),IPL_DEPTH_8U,1);
IplImage *d=cvCreateImage(cvGetSize(p),IPL_DEPTH_8U,1);
RGBtoGRAYTmax(p,c);//调用最大值法灰度化函数
AveGRAY(p,b);//调用平均值法灰度化函数
double t = (double)cvGetTickCount();//算运算时间
JIAQUANGRAY(p,d);//调用加权平均值法灰度化函数
t = (double)cvGetTickCount() - t;
printf( "exec time = %gms\n", t/(cvGetTickFrequency()*1000.));//算运算时间(ms)
cvNamedWindow("max",0);
cvNamedWindow("AVE",0);
cvNamedWindow("jiaquan",0);
cvShowImage("max",c);
cvShowImage("AVE",b);
cvShowImage("jiaquan",d);
cvWaitKey(0);
cvDestroyWindow("OUT");
cvDestroyWindow("AVE");
cvDestroyWindow("jiaquan");
cvReleaseImage(&p);
cvReleaseImage(&c);
cvReleaseImage(&b);
cvReleaseImage(&d);}
各位,我的灰度化的效果为什么和matlab的效果差距很大啊?
#include "cv.h"
#include "highgui.h"
/**************************最大值法灰度化****************************************/
/*IplImage * RGBtoGRAYTmax(IplImage *in,IplImage *out)
{
for (int y=0;y<in->height;y++)
{
uchar *ptr=(uchar*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
if(ptr[3*x]>ptr[3*x+1])
out->imageData[y * in->width+ x]=ptr[3*x];
else out->imageData[y * in->width + x]=ptr[3*x+1];
if(ptr[3*x+2]>in->imageData[x])
out->imageData[y * in->width + x]=ptr[3*x+2];
}
}
return(out);
}
//*************************平均值法灰度化********************************
IplImage * AveGRAY(IplImage*in,IplImage*out)
{
for (int y=0;y<in->height;y++)
{
char *p=(char*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
out->imageData[y*in->width+x]=(p[3*x]+p[3*x+1]+p[3*x+2])/3;
}
}
return(out);
}
//***********************加权平均法灰度化*******************************
IplImage * JIAQUANGRAY(IplImage*in,IplImage*out)
{
for(int y=0;y<in->height;y++)
{
char *p=(char*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
out->imageData[y*in->width+x]=(p[3*x]*11+p[3*x+1]*59+p[3*x+2]*30)/100;
//out->imageData[y*in->width+x]=p[3*x]*0.11+p[3*x+1]*0.59+p[3*x+2]*0.30;
//out->imageData[y*in->width+x]=p[3*x]*0.072169+p[3*x+1]*0.715160+p[3*x+2]*0.212671;
}
}
return(out);
}
int main()
{
IplImage * p=cvLoadImage("D:\\地下车库\\117\\1.jpg",1);
IplImage *c=cvCreateImage(cvGetSize(p),IPL_DEPTH_8U,1);
IplImage *b=cvCreateImage(cvGetSize(p),IPL_DEPTH_8U,1);
IplImage *d=cvCreateImage(cvGetSize(p),IPL_DEPTH_8U,1);
RGBtoGRAYTmax(p,c);//调用最大值法灰度化函数
AveGRAY(p,b);//调用平均值法灰度化函数
double t = (double)cvGetTickCount();//算运算时间
JIAQUANGRAY(p,d);//调用加权平均值法灰度化函数
t = (double)cvGetTickCount() - t;
printf( "exec time = %gms\n", t/(cvGetTickFrequency()*1000.));//算运算时间(ms)
cvNamedWindow("max",0);
cvNamedWindow("AVE",0);
cvNamedWindow("jiaquan",0);
cvShowImage("max",c);
cvShowImage("AVE",b);
cvShowImage("jiaquan",d);
cvWaitKey(0);
cvDestroyWindow("OUT");
cvDestroyWindow("AVE");
cvDestroyWindow("jiaquan");
cvReleaseImage(&p);
cvReleaseImage(&c);
cvReleaseImage(&b);
cvReleaseImage(&d);}
各位,我的灰度化的效果为什么和matlab的效果差距很大啊?
解决方案 »
- 怎样允许CEdit控件中的鼠标按左键拖动复制(剪切)操作?
- 字节读取问题
- RSA加密 汉字方面问题 很急急~~~~!!!!!!!!!!!
- 如何将字符串转化为宏
- 与业务上什么都不懂,问问题带着撒娇语气的丑女工作,简直就是一种折磨.散100分求这样的日子早日过去
- 高手请分析,谢谢
- HWAVEOUT 机器不认
- 如何在CTreeCtrl中删除一个结点,没有选中,给出关键字,查找匹配删除
- 如何学习mfc?请各位高手给点建议,谢谢啊!!!
- 请问哪儿有VToolsD (V2.03)以上的版本下载啊?
- CHtmlView如何在新IE窗口的打开超链接
- MFC多文档界面,等子框架全部显示完后,需要DoMode弹出一个对话框,如何实现?
rgb2gray converts RGB values to grayscale values by forming a weighted sum of the R, G, and B components:0.2989 * R + 0.5870 * G + 0.1140 * B
IplImage * JIAQUANGRAY(IplImage*in,IplImage*out)
{
for(int y=0;y<in->height;y++)
{
char *p=(char*)(in->imageData+y*in->widthStep);
for (int x=0;x<in->width;x++)
{
out->imageData[y*in->width+x]=(p[3*x]*11+p[3*x+1]*59+p[3*x+2]*30)/100;
这个不就是matlab里面的方法吗?但是差别很大啊!
enum
{
CV_BGR2BGRA =0,
CV_RGB2RGBA =CV_BGR2BGRA, CV_BGRA2BGR =1,
CV_RGBA2RGB =CV_BGRA2BGR, CV_BGR2RGBA =2,
CV_RGB2BGRA =CV_BGR2RGBA, CV_RGBA2BGR =3,
CV_BGRA2RGB =CV_RGBA2BGR, CV_BGR2RGB =4,
CV_RGB2BGR =CV_BGR2RGB, CV_BGRA2RGBA =5,
CV_RGBA2BGRA =CV_BGRA2RGBA, CV_BGR2GRAY =6,
CV_RGB2GRAY =7,
CV_GRAY2BGR =8,
CV_GRAY2RGB =CV_GRAY2BGR,
CV_GRAY2BGRA =9,
CV_GRAY2RGBA =CV_GRAY2BGRA,
CV_BGRA2GRAY =10,
CV_RGBA2GRAY =11, CV_BGR2BGR565 =12,
CV_RGB2BGR565 =13,
CV_BGR5652BGR =14,
CV_BGR5652RGB =15,
CV_BGRA2BGR565 =16,
CV_RGBA2BGR565 =17,
CV_BGR5652BGRA =18,
CV_BGR5652RGBA =19, CV_GRAY2BGR565 =20,
CV_BGR5652GRAY =21, CV_BGR2BGR555 =22,
CV_RGB2BGR555 =23,
CV_BGR5552BGR =24,
CV_BGR5552RGB =25,
CV_BGRA2BGR555 =26,
CV_RGBA2BGR555 =27,
CV_BGR5552BGRA =28,
CV_BGR5552RGBA =29, CV_GRAY2BGR555 =30,
CV_BGR5552GRAY =31, CV_BGR2XYZ =32,
CV_RGB2XYZ =33,
CV_XYZ2BGR =34,
CV_XYZ2RGB =35, CV_BGR2YCrCb =36,
CV_RGB2YCrCb =37,
CV_YCrCb2BGR =38,
CV_YCrCb2RGB =39, CV_BGR2HSV =40,
CV_RGB2HSV =41, CV_BGR2Lab =44,
CV_RGB2Lab =45, CV_BayerBG2BGR =46,
CV_BayerGB2BGR =47,
CV_BayerRG2BGR =48,
CV_BayerGR2BGR =49, CV_BayerBG2RGB =CV_BayerRG2BGR,
CV_BayerGB2RGB =CV_BayerGR2BGR,
CV_BayerRG2RGB =CV_BayerBG2BGR,
CV_BayerGR2RGB =CV_BayerGB2BGR, CV_BGR2Luv =50,
CV_RGB2Luv =51,
CV_BGR2HLS =52,
CV_RGB2HLS =53, CV_HSV2BGR =54,
CV_HSV2RGB =55, CV_Lab2BGR =56,
CV_Lab2RGB =57,
CV_Luv2BGR =58,
CV_Luv2RGB =59,
CV_HLS2BGR =60,
CV_HLS2RGB =61, CV_BayerBG2BGR_VNG =62,
CV_BayerGB2BGR_VNG =63,
CV_BayerRG2BGR_VNG =64,
CV_BayerGR2BGR_VNG =65,
CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG,
CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG,
CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG,
CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG,
CV_BGR2HSV_FULL = 66,
CV_RGB2HSV_FULL = 67,
CV_BGR2HLS_FULL = 68,
CV_RGB2HLS_FULL = 69,
CV_HSV2BGR_FULL = 70,
CV_HSV2RGB_FULL = 71,
CV_HLS2BGR_FULL = 72,
CV_HLS2RGB_FULL = 73,
CV_LBGR2Lab = 74,
CV_LRGB2Lab = 75,
CV_LBGR2Luv = 76,
CV_LRGB2Luv = 77,
CV_Lab2LBGR = 78,
CV_Lab2LRGB = 79,
CV_Luv2LBGR = 80,
CV_Luv2LRGB = 81,
CV_BGR2YUV = 82,
CV_RGB2YUV = 83,
CV_YUV2BGR = 84,
CV_YUV2RGB = 85,
CV_BayerBG2GRAY = 86,
CV_BayerGB2GRAY = 87,
CV_BayerRG2GRAY = 88,
CV_BayerGR2GRAY = 89, CV_YUV420i2RGB = 90,
CV_YUV420i2BGR = 91,
CV_COLORCVT_MAX =100
};