如何利用EMGU CV库在c#中获取红色区域的平均强度值

本文关键字:区域 红色 获取 EMGU 何利用 CV 库在 | 更新日期: 2023-09-27 17:49:53

这里我用的是:

pictureBox1.Image = My_Image.ToBitmap();
byte Red_val = My_Image.Data[0, 0, 2];
MessageBox.Show(Red_val.ToString());

这是否给出了红色区域的平均强度?如何得到平均强度值?

如何利用EMGU CV库在c#中获取红色区域的平均强度值

有可用的Image.GetAverage()方法可以完成这项工作。还有一个超载的Image.GetAverage(mask),它将采取一个掩码,如果你需要一个非矩形区域:http://www.emgu.com/wiki/files/1.4.0.0/html/3b71b52b-48a1-a3de-d3f6-75010ef3ff26.htm

第二行:

byte Red_val = My_Image.Data[0, 0, 2];

将给你第0行和第0列像素的红色值。如果你想要整个图片的平均红色,你应该遍历它的行和列,并总结通道数据。

 Double Red_avg = 0.0;  
 for (int j = 0; j < My_Image.Cols; j++)
 {
    for (int i = 0; i < My_Image.Rows; i++)
    {
    Red_avg+=My_Image.Data[i, j,2];
    }
 }
Red_avg=Red_avg/(My_Image.Cols*My_Image.Rows);

看一下图片。EMGU中的AvgSdv方法:

public void AvgSdv( out TColor avg, out MCvScalar sdv )

It "计算数组元素的平均值和标准差,独立于每个通道"。这可能比你自己遍历图像要快。