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

C++とOpenCVで画像の明るさを変更する方法を解説

画像の明るさを変更するということは、ピクセルの値そのものを変えることを意味します。具体的には、各ピクセルの現在の値に対して、ある整数値を加算または減算します。すべてのピクセルに一定の値を加算すれば画像は明るくなり、逆に減算すれば明るさは下がります。この記事では、まず明るさを上げる方法を解説し、続いて明るさを下げる方法もご紹介します。

明るさを上げる方法

OpenCVを使えば、画像の明るさを上げるのは非常に簡単です。明るさを上げるには、各チャンネルの値に一定の数値を加算します。例えば、BGR形式の画像は青(B)、緑(G)、赤(R)の3つのチャンネルを持つため、あるピクセルの現在の値は(B, G, R)という形式で表されます。明るさを上げるには、これにスカラー値を加算します。例えば(B, G, R)+(10, 10, 10)や(B, G, R)+(20, 20, 20)のように、任意の数値を指定できます。

以下のサンプルコードは、画像を明るくする処理を実行するものです。

サンプルコード

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
    Mat original;//元画像を読み込むための行列を宣言//
    Mat brighter;//明るさ変更後の画像を格納する行列を宣言//
    namedWindow("Original");//元画像を表示するウィンドウを宣言//
    namedWindow("Brighter");//明るくした画像を表示するウィンドウを宣言//
    original = imread("bright.jpg");
    brighter = original + Scalar(80, 80, 80);//整数値を加算して明るさを変更//
    imshow("Original", original);//元画像を表示//
    imshow("Brighter", brighter);//明るくした画像を表示//
    waitKey(0);//キー入力を待機//
    return(0);
}

実行結果

C++とOpenCVで画像の明るさを変更する方法を解説

明るさを下げる方法

逆に、画像を暗くしたい場合は、各ピクセルから一定の値を減算します。コードの書き方はほぼ同じで、Scalarに指定する値を負にするだけです。例えば「brighter = original - Scalar(80, 80, 80);」のように記述すれば、画像全体が暗くなります。

なお、ピクセル値が255を超えたり0未満になったりする場合は、OpenCVが自動的に飽和処理(saturate_cast)を行うため、値のオーバーフローを気にせず安全に演算できる点も便利です。

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

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

  2. Image Resizerで画像形式を変換する方法|初心者向けに手順をわかりやすく解説

    デジタル画像は、手元のスナップ写真とは違い、さまざまな用途に柔軟に活用できます。リサイズやトリミング、回転といった編集はもちろん、フォーマット(形式)の変更も自由自在です。ただし、これらの作業を行うには画像編集ツールが必要になります。Adobe Photoshopのような高機能ソフトもありますが、操作が難しく、初心者にはハードルが高いのが実情です。そこで本記事では、シンプルで直感的に使えるフリーツール「Image Resizer」を使って、デジタル写真の形式を変更する方法をご紹介します。このツールを使えば、誰でも簡単に画像を別の形式へ変換できます。Image Resizerの主な機能すでにお気