C++とOpenCVで二値画像(バイナリイメージ)を反転する方法
二値画像(バイナリイメージ)の反転とは、ピクセル値を逆転させる処理のことです。視覚的な観点から見ると、二値画像を反転させると、白いピクセルは黒へ、黒いピクセルは白へと変換されます。
この処理は、主に3つの関数を組み合わせて実現します。それぞれの手順を順番に見ていきましょう。
ステップ1:カラー画像をグレースケールに変換する
まず、cvtColor()関数を使って元の画像をグレースケール画像に変換します。この関数の基本形は次の通りです。
cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);
ステップ2:グレースケール画像を二値化する
続いて、グレースケール画像を二値画像に変換し、結果を「binary_image」行列に格納します。
threshold(grayscale_image, binary_image, 100, 255, THRESH_BINARY);
ここで「grayscale_image」は入力(ソース)行列、「binary_image」は出力(デスティネーション)行列です。その後ろにある「100」と「255」の2つの値は、しきい値の範囲を表しています。この例では、しきい値の範囲が、変換対象となるグレースケールのピクセル値を示します。
ステップ3:bitwise_not()で画像を反転する
bitwise_not(source_matrix, destination_matrix);
bitwise_not()関数は、ソース行列のピクセル値を反転させ、その結果をデスティネーション行列に格納します。ここでは、ソース行列が「binary_image」、デスティネーション行列が「inverted_binary_image」に相当します。
サンプルプログラム
以下のプログラムは、二値画像の反転を実行する完全なコード例です。
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat original_image;//元画像を読み込むための行列//
Mat grayscale_image;//変換後の画像を格納するための行列//
Mat binary_image;//二値画像を格納するための行列//
Mat inverted_binary_image;//反転した二値画像を格納するための行列//
namedWindow("Binary Image");//二値画像を表示するウィンドウ//
namedWindow("Inverted Binary Image");//反転した二値画像を表示するウィンドウ//
original_image = imread("mountain.jpg");//画像を行列に読み込む//
cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);//BGRからグレースケールに変換し、grayscale_image行列に格納//
threshold(grayscale_image, binary_image, 100, 255, THRESH_BINARY);//グレースケール画像を二値画像に変換//
bitwise_not(binary_image, inverted_binary_image);//二値画像を反転してinverted_binary_image行列に格納//
imshow("Binary Image", binary_image);//二値画像を表示//
imshow("Inverted Binary Image", inverted_binary_image);//反転した二値画像を表示//
waitKey(0);
return 0;
}実行結果
プログラムを実行すると、元の二値画像と、白黒が入れ替わった反転後の二値画像がそれぞれ別のウィンドウに表示されます。

-
C++とOpenCVで画像のチャンネル数を取得する方法を解説
この記事では、OpenCVを使って画像のチャンネル数を調べる方法について解説します。プログラムを実行すると、コンソール画面に画像のチャンネル数が表示されます。チャンネル数を取得するには、OpenCVが提供するchannels()メソッドを使用します。このメソッドは、Matクラスのオブジェクト(画像行列)に対して呼び出すことで、その画像のチャンネル数を整数値として返します。例えば、カラー画像の場合は通常3チャンネル(BGR)、グレースケール画像の場合は1チャンネルとなります。画像処理を行う際、扱っている画像がカラーかモノクロかを判別するために、チャンネル数の確認は非常に重要な処理の一つです。以下
-
C++とOpenCVで画像を読み込んで表示する方法を徹底解説
この記事では、C++でOpenCVを使用して画像を読み込み、表示する方法について詳しく解説します。OpenCVで画像の読み込みや表示を行うには、以下のような関数やデータ構造が必要になります。 画像処理に必要な基本要素 Mat(マトリクス) Matは関数ではなく、データ構造の一種である変数型です。C++におけるint型やchar型、string型のように、MatはOpenCV独自の変数型であり、画像を格納するための行列(マトリクス)データ構造を作成します。プログラム内で「Mat myImage;」と記述した場合、「myImage」という名前の行列変数を宣言していることになります。 name