【问题标题】:Adjusting Brightness, OpenCV and c++调整亮度、OpenCV 和 c++
【发布时间】:2013-01-09 23:13:40
【问题描述】:

我想知道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;
    } 
}

【问题讨论】:

    标签: c++ opencv brightness


    【解决方案1】:

    使用matrix expression:

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

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

    【讨论】:

      【解决方案2】:

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

      一般来说,给定像素值v,校正后的新值将是v'=a*v + b

      【讨论】:

      • 教程中没有明确写出此信息,谢谢。
      猜你喜欢
      • 2018-11-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多