OpenCV: доступ и получение квадратного корня пикселей - PullRequest
2 голосов
/ 16 июня 2009

Я использую OpenCV для обнаружения объектов, и одна из операций, которые я хотел бы выполнить, это квадратный корень на пиксель. Я думаю, что цикл будет что-то вроде:

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

Мой вопрос: как я могу получить доступ к значению пикселя в координатах (x, y) в объекте IplImage?

Ответы [ 4 ]

3 голосов
/ 16 июня 2009

Предполагая, что img_ имеет тип IplImage, и предполагая 16-битные целочисленные данные без знака, я бы сказал

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

См. Также здесь для определения IplImage.

1 голос
/ 08 июля 2009

пожалуйста, используйте макрос CV_IMAGE_ELEM. Также рассмотрите возможность использования cvPow с power = 0.5 вместо работы с пикселями самостоятельно, чего в любом случае следует избегать

1 голос
/ 19 июня 2009

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 ++. Я бы предложил использовать справочную таблицу для квадратных корней пикселей, если это будет какое-либо приложение в реальном времени.

0 голосов
/ 23 июня 2009

Вы можете найти несколько способов достижения элементов изображения в прекрасном учебном пособии Гэди Агама по OpenCV здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...