【问题标题】:Pixel Intensity in opencv#opencv中的像素强度#
【发布时间】:2019-08-19 10:25:40
【问题描述】:

我是图像处理和 Opencv 的初学者。我正在尝试使用 OPENCV# 找出图像的各个像素强度。这里有帮助:http://docs.opencv.org/doc/user_guide/ug_mat.html?highlight=pixel%20intensity 针对同一问题。但我不确定如何在 OPENCV# 中使用它。 我知道这是一个非常基本的查询。请尝试帮忙。提前致谢。

【问题讨论】:

    标签: opencv


    【解决方案1】:

    像素强度与该像素的灰度值相同。要获得 BGR 图像的灰度(像素强度)版本,您可以这样做:

    cv::cvtColor(bgr_mat,gray_mat,CV_BGR2GRAY);
    

    现在 3 通道 BGR 图像已转换为 1 通道 GRAYSCALE 图像。要找到灰度图像中像素 (x,y) 的强度,您可以这样做:

    //NOTE: in OpenCV pixels are accessed in (row,col) format
    int intensity = (int)gray_mat.at<uchar>(y,x);
    

    由于每个灰度像素都存储为 uchar,intensity 的值将介于 (0-255) 之间,其中 255 是最大强度(视为完全白色的像素)。

    【讨论】:

    • 不应该在你的第一行代码中使用 CV_BGR2GRAY 来代替,因为 OpenCV 通常使用 BGR 而不是 RGB?
    • 像素的顺序无关紧要,bgr 和 rgb 将具有相同的灰度结果,并且为简单起见,因为用户是新用户并使用我以 rgb 格式解释的导入图像。
    • 但是红色、绿色和蓝色并没有以同样的方式转换为灰色。通常,r*0.299、g*0.587 和 b*0.114。使用您拥有的代码,绿色很好,但红色和蓝色已被切换,这会给您“错误”的强度。
    • 我提出这个问题的唯一原因是因为我以前遇到过这个问题。见:answers.opencv.org/question/196656/…
    【解决方案2】:

    在 emgu cv 中,你可以像 this 那样做。

    //Color
    //Red 
    byte Red_val = My_Image.Data[y,x,0];
    //Green 
    byte Green_val = My_Image.Data[y,x,1];
    //Blue 
    byte Blue_val = My_Image.Data[y,x,2];
    

    //Greyscale
    byte Gray_val = My_Image.Data[y,x,0];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2015-10-15
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      相关资源
      最近更新 更多