Регулировка яркости, OpenCV и переполнения стека

Я хотел знать, есть ли какая-либо функция OpenCV, использующая C ++ для регулировки яркости и контрастности видео / кадра. Можно преобразовать цветовое пространство BGR в цветовое пространство HSV и отбросить последний компонент V (яркость), чтобы сделать алгоритм менее чувствительным к условиям освещения в видео, но как я могу это сделать?

Я думал об использовании чего-то вроде cvAddS (frame, cvScalar (-50, -50, -50), frame), чтобы уменьшить яркость, cvAddS и cvScalar хорошо работают для C, но как я могу это сделать для C ++, я использую AddS и Скаляр в моей программе, но не работает с C ++

int main() {
VideoCapture video(1);
if(!video.isOpened()) {
cerr<<"No video input"<<endl; return -1;
}
namedWindow("Video",CV_WINDOW_AUTOSIZE);

for(;;) {
Mat frame;
video >> frame; if(!frame.data) break;
Mat frame2;
//I USE AddS AND Scalar TO DECREASE THE BRIGHTNESS
AddS(frame,Scalar(-50,-50,-50),frame2);
//BUT DON'T WORK WITH C++
imshow("Video",frame2);

int c=waitKey(20);

if(c >= 0)break;
}
}

2

Решение

использование матричное выражение:

cv::Mat frame2 = frame + cv::Scalar(-50, -50, -50);

Вы также можете настроить контраст с помощью выравнивание гистограммы. Конвертируйте ваше изображение RGB в HSV и примените cv::equalizeHist() на канал V.

4

Другие решения

Яркость и контраст обычно корректируются с помощью линейного преобразования значений пикселей. Яркость соответствует аддитивному сдвигу, а контрастность — мультипликативному коэффициенту.

В общем, учитывая значение пикселя vновое значение после коррекции будет v'=a*v + b,

3

По вопросам рекламы [email protected]