2

ビデオ/フレームの明るさとコントラストを調整するために C++ を使用する OpenCV の機能があるかどうかを知りたかったのです。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;
    } 
}
4

2 に答える 2

4

行列式を使用:

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

ヒストグラムの均等化を使用してコントラストを調整することもできます。RGB 画像を HSV に変換cv::equalizeHist()し、V チャンネルに適用します。

于 2013-01-10T03:55:11.943 に答える
3

明るさとコントラストは通常​​、ピクセル値の線形変換を使用して補正されます。明るさは加算シフトに対応し、コントラストは乗算係数に対応します。

一般に、ピクセル値が与えられた場合v、補正後の新しい値は になりますv'=a*v + b

于 2013-01-10T18:49:57.127 に答える