Перейти к содержимому
Compvision.ru
McBodik

Цвет пикселя

Recommended Posts

Здравствуйте. У меня возник небольшой вопрос.

для каждого пикселя возможно сделать вот такое:

CvScalar pix=cvGet2D(image, i,j);

double y=0.299*pix.val[2]+0.587*pix.val[1]+0.114*pix.val[0];

но если у меня картинка серая, возмножно ли узнать значение серого оттенка этого пикселя сразу без использования cvGet2D?

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В IplImage есть:

char *imageData; - здесь лежат данные

int widthStep; - это шаг по вертикали в байтах, он не равен количеству пикселей (учитывает выравнивание).

Значение пикселя (если тип данных char) будет I=img->imageData[x+img->widthStep*y];

Думаю этого для ответа на Ваш вопрос хватит.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В IplImage есть:

char *imageData; - здесь лежат данные

int widthStep; - это шаг по вертикали в байтах, он не равен количеству пикселей (учитывает выравнивание).

Значение пикселя (если тип данных char) будет I=img->imageData[x+img->widthStep*y];

Думаю этого для ответа на Ваш вопрос хватит.

не совсем понимаю. если тип char, тогда что какой результат будет выдаватся? это же не будет число…

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все в компьютере есть число :)

char - это тип данных размером 8 бит = 1 байт.

если данные хранятся в другом формате, то типы нужно преобразовывать.

Возьмите любой учебник по C/C++.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Значение пикселя (если тип данных char) будет I=img->imageData[x+img->widthStep*y];

Поправлю.

В более общем случае, цвет пикселя лучше получить так:

CvScalar pixel_color;

for (int i = 0; i < img->nChannels; ++i)

{

	pixel_color.val[i] = (uchar)img->imageData[x + i + img->widthStep * y];

}

В результате pixel_color будет хранить правильный цвет для всех цветовых простанств.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×