Когда я загружаю изображение в OpenCV, оно всегда темнее оригинала.Зачем? - PullRequest
3 голосов
/ 15 июля 2010

Итак, я загружаю цветной .png файл, который был снят на iphone, используя cvLoadImage.И после того, как он был загружен, когда я немедленно отображаю его в своем терминале X11, изображение определенно темнее, чем оригинальный файл png.

В настоящее время я использую это для загрузки изображения: IplImage * img3 = cvLoadImage ("bright.png", 1);

Для второго параметра я попробовал все следующее:

CV_LOAD_IMAGE_UNCHANGED

CV_LOAD_IMAGE_GRAYSCALE

CV_LOAD_IMAGE_COLOR

CV_LOAD_IMAGE_ANYDEPTH

из 101_ * * * * * * *.Оттенки серого определенно сделали изображение в градациях серого.Но, как предложено из http://www.cognotics.com/opencv/docs/1.0/ref/opencvref_highgui.htm,, даже с использованием CV_LOAD_IMAGE_ANYDEPTH |CV_LOAD_IMAGE_ANYCOLOR для максимально точной загрузки изображения приводил к отображению более темного изображения в терминале.

У кого-нибудь есть идеи, как правильно отобразить исходное изображение?

Большое спасибо заранее.

Ответы [ 3 ]

4 голосов
/ 22 июля 2010

Да, OpenCV не применяет гамма-коррекцию.


// from: http://gegl.org/
// value: 0.0-1.0
static inline qreal
linear_to_gamma_2_2 (qreal value){
  if (value > 0.0030402477)
    return 1.055 * pow (value, (1.0/2.4)) - 0.055;
  return 12.92 * value;
}
// from: http://gegl.org/
static inline qreal
gamma_2_2_to_linear (qreal value){
  if (value > 0.03928)
    return pow ((value + 0.055) / 1.055, 2.4);
  return value / 12.92;
}

2 голосов
/ 15 июля 2010

Это происходит только при загрузке в OpenCV? Открытие с любым другим зрителем не показывает разницу?

Я не могу подтвердить это без нескольких тестов, но я считаю, что гамма дисплея iPhone составляет 1,8 (источник: http://www.colorwiki.com/wiki/Color_on_iPhone#The_iPhone.27s_Display). Вероятно, ваш монитор X11 настроен на 2,2 (как и весь остальной мир). *

Если эта теория верна, да, на X11 изображения будут казаться темнее, чем на iPhone. Вы можете изменить калибровку монитора или выполнить некоторую обработку изображения, чтобы учесть разницу.

Edit:

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

http://permalink.gmane.org/gmane.comp.lib.opencv.devel/837

Возможно, вы захотите реализовать это самостоятельно или «исправить» с помощью ImageMagick. На этой странице вы узнаете, как это сделать:

http://www.4p8.com/eric.brasseur/gamma.html

0 голосов
/ 16 июля 2010

Обычно я загружаю изображение с помощью:

cvLoadImage("file.png", CV_LOAD_IMAGE_UNCHANGED);

Один интересный тест, который вы можете сделать, чтобы определить, действительно ли OpenCV действительно работает с данными изображения, - это просто создать другое изображение с помощью cvCreateImage (), а затем скопироватьданные в это вновь созданное изображение и сохраните его в другом файле с помощью cvLoadImage ().

Возможно, это просто ошибка отображения.Конечно, я бы посоветовал вам обновить до последней версии OpenCV.

...