2013-01-16 74 views
3

我将图像从rgb转换为YUV。现在我想单独找到亮度通道的平均值。你能帮我告诉我怎么能做到这一点吗?此外,有没有一种方法可以确定图像由多少个通道组成?单通道的平均值

回答

3

Image.channels()将为您提供任何图像中的通道数量。请参阅OpenCV文档。

多种渠道可以如下访问:

 img.at<Vec3b>(i,j)[0] //Y 
     img.at<Vec3b>(i,j)[1] //U 
     img.at<Vec3b>(i,j)[2] //V 
+0

我试过了。但我无法找到访问单个频道值的结果。我想我正在寻找荣。 –

+1

检查编辑.. –

14

你可以这样做:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <stdio.h> 

using namespace cv; 

int main(void) 
{ 
    vector<Mat> channels; 
    Mat img = imread("Documents/forest.jpg"); 
    split(img, channels); 
    Scalar m = mean(channels[0]); 
    printf("%f\n", m[0]); 

    return 0; 
} 
+0

std :: vector rgbChannels(3); cv :: split(inputImage,rgbChannels); 是不是格式?而且,m的数据类型应该是什么?我面临着问题。你可以帮我吗。? –

+0

嗨,道歉,最近我一直在使用Python太多,我忘记了类型哈哈。我编辑了代码示例。希望这可以帮助。 – lightalchemist

+0

感谢您的编辑。 :)。请问你为什么要把它作为'm [0]'? –