调整亮度,OpenCV和c ++

时间:2013-01-09 23:13:41

标签: c++ opencv brightness

我想知道OpenCV是否有任何使用C ++的功能来调整视频/帧的亮度和对比度。您可以将BGR色彩空间转换为HSV色彩空间,并丢弃后一个组件V(亮度),使算法对视频中的光线条件不太敏感,但我该怎么办呢?

我正在考虑使用像cvAddS(frame,cvScalar(-50,-50,-50),frame)之类的东西来降低亮度,cvAddS和cvScalar工作对C来说很好但是我怎样才能为C ++做到这一点,我在我的程序中使用AddS和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;
    } 
}

2 个答案:

答案 0 :(得分:4)

使用matrix expression

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

您可能还想使用histogram equalization调整对比度。将RGB图像转换为HSV并将cv::equalizeHist()应用于V通道。

答案 1 :(得分:3)

通常使用像素值的线性变换来校正亮度和对比度。亮度对应于加性偏移,对比度对应于乘法因子。

通常,给定像素值v,校正后的新值将为v'=a*v + b