【发布时间】:2023-03-10 18:21:01
【问题描述】:
我对 OpenCV 如何进行颜色到灰度转换感到困惑。如果我向它发送一个仅由纯红色、纯绿色和纯蓝色组成的图像(例如 {255,0,0}),我希望它将其转换为值 255/3 = 85 的一致灰度,但这不是这样的。
我试过了:
IplImage* src;
src=cvLoadImage("image.bmp", 0)
val = cvGetReal2D( src, y, x );
这会产生令人困惑的输出,将纯红色转换为 147,将纯绿色转换为 200,将纯蓝色转换为 95(我想我在那里得到了命令)。灰色会按照您的预期进行转换(例如 {127,127,127} --> 127)。
然后我遇到了 cvCVTColor 函数,这似乎使用人眼反应来加权转换(灰色 = 0.299*Red + 0.587*Green + 0.114*Blue):
IplImage *im_rgb = cvLoadImage("image.bmp");
IplImage *im_gray = cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);
val = cvGetReal2D( im_gray, y, x );
我已通过拆分渠道成功转换:
IplImage* red_channel = cvCreateImage(cvSize(src->width, src->height), 8, 1);
IplImage* green_channel = cvCreateImage(cvSize(src->width, src->height), 8, 1);
IplImage* blue_channel = cvCreateImage(cvSize(src->width, src->height), 8, 1);
cvSplit( src, blue_channel , green_channel, red_channel , NULL);
val = ( cvGetReal2D( red_channel, y, x ) + cvGetReal2D( green_channel, y, x ) + cvGetReal2D( blue_channel, y, x ) ) / 3;
但我想从中了解 OpenCV 在使用 cvLoadImage 时如何转换为灰度和/或是否有一个函数可以在没有人眼响应的情况下进行转换(即 Gray = (Red+Green+Blue) /3)?
【问题讨论】:
标签: opencv image-processing colors computer-vision