我想知道OpenCV使用c++是否有任何功能来调整视频/帧的亮度和对比度。您可以将BGR色彩空间转换为HSV色彩空间,并丢弃后一分量V(亮度),以使算法对视频中的光线条件不那么敏感,但我怎么做呢?
我正在考虑使用cvadd(帧,cvScalar(-50, -50, -50),帧)来降低亮度,cvadd和cvScalar工作对C来说很好,但我如何才能为c++做到这一点,我在程序中使用add和Scalar,但不使用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
。