OpenCV图像灰度化是怎么做的呢?
OpenCv中采用函数cvCvtColor,设置其第三个参数为CV_BGR2GRAY即可实现彩色图像的灰度化。
为了验证,我自己写了一小段代码,但是得到的结果不太理想,请大家帮着把把脉。
[code=C/C++][/code]
ColorImage = cvLoadImage( "12.jpg", -1 ); //载入文件
if (ColorImage == NULL)
return;
int i = ColorImage->width * ColorImage->height;
ptr = new char[i];
for(int j=0; j<ColorImage->height; j++)
{
for(int x=0; x<ColorImage->width; x++)
ptr[j*ColorImage->width+x]=
(char)( 0.072169*ColorImage->imageData[3*(j*ColorImage->width+x)]
+0.715160*ColorImage->imageData[3*(j*ColorImage->width+x)+1]
+0.212671*ColorImage->imageData[3*(j*ColorImage->width+x)+2]); //对RGB三个值加权平均
}
//根据新的数据,创建一个图像头指针
GrayImage = cvCreateImageHeader(cvGetSize(ColorImage), ColorImage->depth, 1);
cvSetData(GrayImage, ptr, GrayImage->widthStep);
cvNamedWindow("GrayImage", CV_WINDOW_AUTOSIZE); //显示图像
cvShowImage("GrayImage", GrayImage);
cvWaitKey(0);
cvDestroyWindow("GrayImage");
以上这段代码得到的灰度图像,为啥感觉有一些地方发亮,感觉对比度不对,和OpenCV里面的函数处理结果相差较大,为什么呢?请高手帮我指出这代码到底有啥问题呢?
[解决办法]
cvLoadImage第二个参数改成0就是灰度图了,还自己转啥
[解决办法]
看看cvCvtColor函数源代码