Я хотел знать, есть ли какая-либо функция 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;
}
}
использование матричное выражение:
cv::Mat frame2 = frame + cv::Scalar(-50, -50, -50);
Вы также можете настроить контраст с помощью выравнивание гистограммы. Конвертируйте ваше изображение RGB в HSV и примените cv::equalizeHist()
на канал V.
Яркость и контраст обычно корректируются с помощью линейного преобразования значений пикселей. Яркость соответствует аддитивному сдвигу, а контрастность — мультипликативному коэффициенту.
В общем, учитывая значение пикселя v
новое значение после коррекции будет v'=a*v + b
,