OpenCVのイテレータメソッドを使って画像の色数を減らす方法
OpenCVには、C++のSTL(標準テンプレートライブラリ)と互換性のある「Mat_イテレータ」クラスが用意されています。このクラスを利用すると、画像内の各ピクセルに非常に簡単かつ効率的にアクセスすることができます。
イテレータを使用するには、まず「Mat_
色数を減らす仕組み
色の削減(カラークオンタイゼーション)は、各チャンネルの画素値を一定間隔で量子化することで実現します。具体的には「現在の値 ÷ div × div + div ÷ 2」という式を適用します。例えばdiv=64の場合、0〜255の値が64刻みの4段階に丸められ、3チャンネル合わせて最大64色に削減されます。+div/2を加えることで、各区間の中央値に近い値へ丸められ、より自然な見た目になります。
サンプルコード
以下のプログラムは、OpenCVでイテレータメソッドを使用して色数を減らす方法を示したものです。
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace std;//std名前空間の宣言//
using namespace cv;//cv名前空間の宣言//
void reducing_Color(Mat& image, int div = 64){ //関数の宣言//
Mat_<Vec3b>::iterator iterator_start;//開始イテレータの宣言//
iterator_start = image.begin<Vec3b>();//先頭位置のイテレータを取得//
Mat_<Vec3b>::iterator iterator_end;//終了イテレータの宣言//
iterator_end = image.end<Vec3b>();//末尾位置のイテレータを取得//
for (; iterator_start != iterator_end; iterator_start++){ //全ピクセルをループ処理//
(*iterator_start)[0] = (*iterator_start)[0] / div * div + div / 2;//第1チャンネル(青)の画素を処理//
(*iterator_start)[1] = (*iterator_start)[1] / div * div + div / 2;//第2チャンネル(緑)の画素を処理//
(*iterator_start)[2] = (*iterator_start)[2] / div * div + div / 2;//第3チャンネル(赤)の画素を処理//
}
}
int main() {
Mat image;//画像を格納する行列//
image = imread("mango.jpg");//画像を読み込む//
namedWindow("Image Window");//ウィンドウの宣言//
reducing_Color(image);//色数削減関数を呼び出す//
imshow("Image Window", image);//色数を減らした画像を表示//
waitKey(0);
return 0;
}コードのポイント
- begin<Vec3b>():画像の最初のピクセル位置を指すイテレータを取得します。
- end<Vec3b>():画像の最後のピクセルの次の位置を指すイテレータを取得します。
- ループ処理:開始イテレータが終了イテレータに到達するまで、全ピクセルに対して順番にアクセスし、3つのチャンネルそれぞれに量子化処理を適用します。
実行結果

実行すると、元の画像から色数が大幅に削減され、ポスタライズ(階調圧縮)されたような効果が得られた画像がウィンドウに表示されます。divの値を変更すれば、色数の削減度合いを自由に調整できるので、ぜひいろいろな値で試してみてください。
-
Javaで画像をネガティブ(反転)に変換する方法|アルゴリズムと実装コードをわかりやすく解説
画像をネガティブに変換するアルゴリズムカラー画像をネガティブ(階調反転)画像に変換する仕組みは非常にシンプルです。基本となる手順は以下の4ステップです。各ピクセルの赤(R)・緑(G)・青(B)の値を取得するそれぞれの色の値を255から引き算し、新しい色の値として保存する変更後の3つの色の値から、新しいピクセル値を生成するその新しい値を元のピクセルに設定するこの「255からの減算」により、明るい部分は暗く、暗い部分は明るくなり、写真のネガフィルムのような反転画像が完成します。Javaによる実装手順Javaでは、標準ライブラリの ImageIO クラスや Color クラスを利用することで、Ope
-
Windows 11/10で画像の色を反転する方法|ペイント・無料ソフト・オンラインツール徹底解説
この記事では、画像の色を反転させる方法(いわゆる「ネガ」画像を作る方法)を詳しく解説します。Windows PCには色反転のための選択肢が数多くあり、標準搭載のMicrosoftペイントはもちろん、無料ソフトやオンラインツールでも簡単に行えます。ここでは、それぞれの方法を初心者にもわかりやすくご紹介します。 画像の色を反転するには? 最も手軽なのは、Windowsに標準搭載されているMicrosoftペイントを使う方法です。それ以外にも、無料で使えるフリーソフトやオンラインツールが多数存在し、どれも追加料金なしで画像の色を反転できます。 本記事では、代表的な無料ソフトとオンラインツールもあわ