Qt+opencv 画像の明るさ調整とコントラスト調整

Qt+opencv 画像の明るさ調整とコントラスト調整

1. 理論的根拠

g(i,j) = アルファ * f(i,j) + ベータ

このうち、i、jは画素のi行j列を表します。g(i,j) は出力画像のピクセル、alpha はコントラスト制御係数、beta は明るさ制御係数です。
もちろん、ピクセルの一部の値を変更するには、ピクセル値にアクセスする必要があります。Opencv には、ピクセルにアクセスするいくつかのメソッドが用意されています。3 チャネルの画像ピクセルの場合は、 m_srcMat.at(i, j)[0] //B にアクセス
ます
m_srcMat.at(i,j) )[1] //G
m_srcMat.at(i,j)[2] //R

2.コアコード

int m_nContrastValue = 100; //对比度值
int m_nBrightValue = 0; //亮度值
Mat m_srcMat,m_dstMat; //原图像、输出图像

void BrightContrast::changeBrightContrast()
{
    
    
    double alpha = m_nContrastValue*0.01;
    int beta = m_nBrightValue;
    int ch = m_srcMat.channels();
    qDebug("alpha= %lf,beta= %d",alpha,beta);

#if 0
    //m_dstMat(i,j) = alpha*m_srcMat(i,j) + beta
    for(int row=0;row<m_srcMat.rows;row++)
    {
    
    
        for(int col=0;col<m_srcMat.cols;col++)
        {
    
    
            if(ch == 3)
            {
    
    
                for(int c=0;c<3;c++)
                {
    
    
                    m_dstMat.at<Vec3b>(row,col)[c] = saturate_cast<uchar>(alpha*(m_srcMat.at<Vec3b>(row,col)[c]) + beta);
                }
            }
        }
    }
#else
    m_srcMat.convertTo(m_dstMat, -1, alpha, beta);
#endif
    bgrMat2Image(m_dstMat);
}

ここでは 2 つの方法を示します。
方法 1: for ループを使用してピクセルごとに操作します。
方法 2: 関数 void ConvertTo(OutputArray m, int rtype, double alpha=1, double beta=0) const; m:
出力結果を示します
rtype: -1 は元の画像と同じであることを示します
alpha: スケール変換係数
beta : スケール変換係数オフセット

3.エフェクト表示

ここに画像の説明を挿入します
デモリンクを投稿しました。https:
//download.csdn.net/download/haohaohaihuai/12442739を参照してください。

著者: Feima Programmer
技術交流へようこそ: QQ: 255895056
転載の際は出典を明記し、不適切な点があれば修正してください

おすすめ

転載: blog.csdn.net/haohaohaihuai/article/details/106254431