Как увеличить яркость с OpenCV.js ?

#javascript #opencv #image-processing

#javascript #opencv #обработка изображений

Вопрос:

Я нашел способ сделать это, но он очень тяжелый и все запаздывает (в основном потому, что я воссоздаю мат попиксельно).

 for (let x = 0; x < src.cols; x  ) {
for (let y = 0; y < src.rows; y  ) {
  for (let c = 0; c < 4; c  ) {
    if(c != 3){
      if((src.data[y * src.cols * src.channels()   x * src.channels()   c] lum_val) < 255){
          dst.data[y * dst.cols * dst.channels()   x * dst.channels()   c] = (src.data[y * src.cols * src.channels()   x * src.channels()   c] lum_val);
        }else{
          dst.data[y * dst.cols * dst.channels()   x * dst.channels()   c] = 255;
        }
      }else{
        dst.data[y * dst.cols * dst.channels()   x * dst.channels()   c] = (src.data[y * src.cols * src.channels()   x * src.channels()   c]);
      }
    }
  }
}
  

Существует ли функция , которая делает то же самое более эффективно ? Или , может быть , более простой способ , который приводит к тому же результату ?

Ответ №1:

Просто следуйте руководству по OpenCV: изменение контрастности и яркости изображения!

Преобразует масштаб (src, dst, alpha, beta)

Масштабирует, вычисляет абсолютные значения и преобразует результат в 8-битный.

Для каждого элемента входного массива функция convertScaleAbs последовательно выполняет три операции: масштабирование, получение абсолютного значения, преобразование в 8-разрядный тип без знака

Параметры:

входной массив src

выходной массив dst

альфа необязательный масштабный коэффициент

бета-необязательная дельта, добавленная к масштабированным значениям

Комментарии:

1. @Val_ для convertScaleAbs есть привязка JS. Смотрите github.com/ucisysarch/opencvjs /…