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

C++とOpenCVで画像のコントラストを変更する方法を解説

画像処理において、明るさやコントラストの調整は最もよく使われる編集効果のひとつです。本記事では、OpenCVを使って画像のコントラストを変更する方法を学びます。

コントラストとは何か

コントラストは、画像のシャープさ(鮮明さ)を左右する重要な要素です。コントラストが高いほど画像はくっきりとシャープに見え、逆にコントラストが低いほど、柔らかく滑らかな印象になります。

コントラストを変更するということは、ピクセル値の重みを増減させることを意味します。具体的には、各ピクセルの値にある定数を掛けることで実現できます。例えば、画像内のすべてのピクセル値に「2」を掛けると、ピクセル値が2倍になり、結果として画像はよりシャープに見えるようになります。

サンプルプログラム

以下のプログラムは、C++とOpenCVを使って画像のコントラストを変更する方法を示しています。

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
    Mat original;//元画像を読み込むための行列を宣言//
    Mat contrast;//コントラスト変更後の画像を格納する行列を宣言//
    namedWindow("Original");//元画像を表示するウィンドウを宣言//
    namedWindow("Contrast");//編集後の画像を表示するウィンドウを宣言//
    original = imread("mountain.jpg");//画像を読み込む//
    original.convertTo(contrast, -1, 2, 0);//コントラストを変更//
    imshow("Original", original);//元画像を表示//
    imshow("Contrast", contrast);//編集後の画像を表示//
    waitKey(0);//キー入力を待機//
    return(0);
}

プログラムのポイント

このプログラムの核心となるのは convertTo() 関数です。この関数は以下のような引数を受け取ります。

  • 第1引数(contrast):変換結果を格納する出力行列
  • 第2引数(-1):出力画像のデータ型。-1を指定すると入力画像と同じ型になります
  • 第3引数(2):スケール倍率(アルファ値)。ここではピクセル値を2倍にしてコントラストを強調しています
  • 第4引数(0):オフセット(ベータ値)。各ピクセルに加算される値です

つまり、convertTo(contrast, -1, 2, 0) は「すべてのピクセル値を2倍し、オフセット0で新しい行列に出力する」という処理を行っています。この倍率の値を大きくすればコントラストはより強くなり、1未満にすれば弱くなります。

実行結果

C++とOpenCVで画像のコントラストを変更する方法を解説

実行すると、「Original」ウィンドウには元画像が、「Contrast」ウィンドウにはコントラストを強調した画像がそれぞれ表示されます。元画像と比較することで、コントラスト変更によるシャープさの違いを視覚的に確認できます。

  1. C++とOpenCVで画像を読み込んで表示する方法を徹底解説

    この記事では、C++でOpenCVを使用して画像を読み込み、表示する方法について詳しく解説します。OpenCVで画像の読み込みや表示を行うには、以下のような関数やデータ構造が必要になります。 画像処理に必要な基本要素 Mat(マトリクス) Matは関数ではなく、データ構造の一種である変数型です。C++におけるint型やchar型、string型のように、MatはOpenCV独自の変数型であり、画像を格納するための行列(マトリクス)データ構造を作成します。プログラム内で「Mat myImage;」と記述した場合、「myImage」という名前の行列変数を宣言していることになります。 name

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

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