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

最佳答案

使用matrix expression:

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

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

关于c++ - 调整亮度,OpenCV和c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14248170/

10-12 14:57