【问题标题】:Get and Set Pixel Gray scale image Using Emgu CV使用 Emgu CV 获取和设置像素灰度图像
【发布时间】:2013-06-08 22:25:35
【问题描述】:

我正在尝试通过将 emgu Cv 与 C# 结合使用来获取和设置灰度图像的像素。 如果我使用较大的图像尺寸,则会出现此错误消息:“索引超出了数组的范围。”

如果我使用 200x200 或更小的图像,则没有错误,但我不明白为什么。

以下是我的代码:

 Image<Gray , byte> grayImage;
--------------------------------------------------------------------

        for (int v = 0; v < grayImage.Height; v++)
        {
            for (int u = 0; u < grayImage.Width; u++)
            {
                byte a = grayImage.Data[u , v , 0]; //Get Pixel Color | fast way
                byte b = (byte)(myHist[a] * (K - 1) / M);
                grayImage.Data[u , v , 0] = b; //Set Pixel Color | fast way
            }
        }
--------------------------------------------------------------------

http://i306.photobucket.com/albums/nn262/neji1909/9-6-25565-10-39.png

请帮助我,对不起,我的英语不好。

【问题讨论】:

    标签: emgucv


    【解决方案1】:

    您不是按 (x,y) 而是按 (row, col) 索引 - 倒置。当您使用 200x200 图像时,无论您使用的是宽度还是高度,都是一样的。

    你可以通过使用指针来做到这一点(更快),因为如果你使用索引 EmguCV 在内部使用对每个像素的 opencv 调用。

    所以:

    byte* ptr = (byte*)image.MIplImage.imageData;
    int stride = image.MIplImage.widthStep;
    
    int width = image.Width;
    int height = image.Height;
    
    for(int j = 0; j < height; j++) 
    {
      for(int i = 0; i < width; i++)
      {
         ptr[i] = (byte)(myHist[a] * (K - 1) / M);
      }
    
      ptr += stride;
    } 
    

    【讨论】:

      【解决方案2】:

      这是因为 x 和 y 在 Data 数组中是倒置的。您应该以这种方式更改代码(反转 u 和 v):

          for (int v = 0; v < grayImage.Height; v++)
          {
              for (int u = 0; u < grayImage.Width; u++)
              {
                  byte a = grayImage.Data[v , u , 0]; //Get Pixel Color | fast way
                  byte b = (byte)(myHist[a] * (K - 1) / M);
                  grayImage.Data[v , u , 0] = b; //Set Pixel Color | fast way
              }
          }
      

      另见Iterate over pixels of an image with emgu cv

      【讨论】:

      • 感谢您的回答,希望以后能再次得到您的帮助或建议。
      • 感谢分配 - 我的问题是图像的 XY 位置 - 我们应该键入 reverse - 在数据中第一个参数是 Y,第二个是 X :P - Data[y,x,Color chanel num]
      猜你喜欢
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 2018-05-21
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多