2

我正在使用 OpenCV 进行对象检测,我希望能够执行的操作之一是每像素平方根。我想循环会是这样的:

IplImage* img_;
...
for (int y = 0; y < img_->height; y++) {
  for(int x = 0; x < img_->width; x++) {
    // Take pixel square root here
  }
}

我的问题是如何访问 IplImage 对象中坐标 (x, y) 处的像素值?

4

4 回答 4

3

假设 img_ 是 IplImage 类型,并假设 16 位无符号整数数据,我会说

unsigned short pixel_value = ((unsigned short *)&(img_->imageData[img_->widthStep * y]))[x];

有关 IplImage 定义,另请参见此处

于 2009-06-15T21:25:43.787 回答
1

OpenCV IplImage 是一个一维数组。您必须创建一个索引才能获取图像数据。像素的位置将基于颜色深度和图像中的通道数。

// width step 
int ws = img_->withStep;
// the number of channels (colors)
int nc = img_->nChannels;
// the depth in bytes of the color 
int d = img_->depth&0x0000ffff) >> 3;
//  assuming the depth is the size of a short
unsigned short * pixel_value = (img_->imageData)+((y*ws)+(x*nc*d));
// this gives you a pointer to the first color in a pixel
//if your are rolling grayscale just dereference the pointer. 

您可以通过移动像素指针 pixel_value++ 来选择通道(颜色)。如果这将是任何类型的实时应用程序,我建议使用像素平方根的查找表。

于 2009-06-18T22:05:52.623 回答
1

请使用 CV_IMAGE_ELEM 宏。另外,考虑使用 power=0.5 的 cvPow 而不是自己处理像素,无论如何都应该避免

于 2009-07-08T15:31:45.727 回答
0

您可以在 Gady Agam 的精彩 OpenCV 教程中找到几种获取图像元素的方法

于 2009-06-22T20:05:50.360 回答