C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++とOpenCVで画像の明るさを下げる方法をわかりやすく解説

OpenCVにおける画像の明るさを下げる処理は、明るさを上げる処理と非常によく似ています。両者の違いは、画像に対して「Scalar(B, G, R)」の値を加算するか減算するかという点だけです。ここでは、スカラー値を減算することで、画像全体の明るさを下げる方法を紹介します。

各ピクセルのB(青)、G(緑)、R(赤)の各チャンネルから同じ値を引くことで、画像は全体的に暗くなります。なお、OpenCVでは減算の結果が0未満になった場合、その値は自動的に0に制限(飽和処理)されるため、負の値による意図しない色の反転を心配する必要はありません。

サンプルコード

以下のプログラムは、OpenCVを使って画像の明るさを下げる具体的な手順を示したものです。

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
    Mat original; //元画像を読み込むための行列を宣言//
    Mat dimmer;//明るさ変更後の画像を格納するための行列を宣言//
    namedWindow("Original");//元画像を表示するウィンドウを宣言//
    namedWindow("Dimmer");//明るさ変更後の画像を表示するウィンドウを宣言//
    original = imread("bright.jpg");//画像ファイルを読み込む//
    dimmer = original - Scalar(80, 80, 80);//スカラー値を減算して明るさを変更//
    imshow("Original", original);//元画像を表示//
    imshow("Dimmer", dimmer);//明るさを下げた画像を表示//
    waitKey(0);//キー入力を待機//
    return(0);
}

実行結果

C++とOpenCVで画像の明るさを下げる方法をわかりやすく解説

コードのポイント解説

  • imread関数: 指定したパスの画像ファイルを読み込み、Mat形式の行列として格納します。
  • Scalar(80, 80, 80): B・G・Rの各チャンネルから一律80ずつ減算しています。この値を大きくするほど、画像はより暗くなります。
  • namedWindow関数: 画像を表示するためのウィンドウを事前に作成します。ウィンドウ名はimshowの際に指定する名前と一致させる必要があります。
  • waitKey(0): ユーザーが何かキーを押すまでプログラムを待機させ、表示されたウィンドウがすぐに閉じないようにします。

このように、OpenCVでは行列演算の記法をそのまま使えるため、わずか1行のコードで画像の明るさ調整を実現できます。明るくしたい場合は同じ式で加算にするだけでOKです。

  1. Java OpenCVライブラリを使って画像の明るさを変更する方法

    OpenCVのorg.opencv.core.Matクラスが提供するconvertTo()メソッドを使うと、行列に対して必要な演算を実行し、画像のコントラストや明るさを簡単に調整できます。このメソッドは以下の4つのパラメータを受け取ります。 mat − 計算結果を格納するための空の行列。ソース行列と同じサイズ・型である必要があります。 rtype − 出力行列の型を指定する整数値。負の値を指定した場合は、ソース行列と同じ型になります。 alpha − ゲイン値。0より大きい値を指定します(デフォルトは1)。この値を変更するとコントラストに影響します。 beta − バイアス値(デフォルトは

  2. 【Java】OpenCVライブラリを使って画像のコントラストを変更する方法

    画像の明るさやコントラストの増減は、画像のピクセル値を変換することで実現できます。この変換は、次のような数式で表されます。g(i, j) = α ・ f(i, j) + βここで、各要素の意味は以下のとおりです。(i, j):ピクセルの位置(座標)α(ゲイン)と β(バイアス):変換のパラメータ一般に、ゲインパラメータ α が画像のコントラストを制御し、バイアスパラメータ β が画像の明るさを制御します。convertTo() メソッドについてorg.opencv.core.Mat クラスの convertTo() メソッドを使うと、指定した行列に対して必要な計算を実行し、画像のコントラストや