[OpenCv] c++ 画像一次演算 | 画像グレースケール

1.画像

1. 画像情報

Q:画像はどのようにコンピュータに保存されますか? A:コンピューターでは、一般的に使用される行列を使用して のサイズのデジタル画像を表現します。行列要素の値は、画像の対応する位置のピクセル値です。
M x NM x N

パソコンのローカルディスクにあるカラー画像は、1台のパソコンを右クリックして「プロパティ」を選択すると、画像の基本情報を見ることができます。

2. 画像の種類

1) バイナリ イメージ:

Q:バイナリ イメージとは何ですか? A: 2 値画像の 2 次元行列は 0 と 1 の 2 つの値のみで構成され、「0」は黒を表し、「1」は白を表します。バイナリ イメージは、グレースケール イメージの特殊なケースと見なすことができます。バイナリ イメージは通常、テキストや線画のスキャン認識 (OCR) やマスク イメージの保存に使用されます。

2) グレースケール画像:

Q:グレースケール画像とは何ですか? A:グレースケール イメージは、ピクセルごとに 1 つのサンプル カラーのみを含むイメージで、通常、最も暗い黒から最も明るい白までのグレー スケールとして表示されます。グレースケール画像は白黒画像とは異なります. コンピュータ グラフィックスの分野では, 白黒画像は黒と白の 2 色しかありませんが, グレースケール画像は黒と白の間の多くのレベルの色深度を持っています.

3) カラーマップ:

Q:カラーマップとは何ですか? A:通常、カラー画像の各ピクセルは、赤 (R)、緑 (G)、青 (B) の 3 つの要素で表されます。画像の各ピクセルの色値 (RGB の 3 原色で表される) は、画像マトリックスに直接格納されます. 各ピクセルの色は、R、G、B の 3 つの成分で表す必要があるため、M とN はそれぞれ画像の行数と列数を表し、それぞれの 2 次元行列は各ピクセルの R、G、B の 3 つの色成分を表します。イメージのデータ型は通常、8 ビットの符号なし整数であり、通常はトゥルーカラー イメージを表現および格納するために使用されます。
RGBM x NRGB

2.画像​​変換

1. カラー画像の 3 つのチャンネルを分離する

通常、カラー画像は 3 チャンネルの画像としてコンピュータに保存されます。画像の各ピクセルは、3 つの数値で構成されるベクトルによって量子化されます。最も一般的なのは、R、G、B の 3 つのコンポーネントです。RGBモデルのこれら 3 つの要素の値は、それぞれ赤、緑、青の 3 原色の明るさを表します。splitこれら 3 つのチャネルを関数で分離できます。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;
int main() {
    
    
	Mat srcImage = imread("...\\dog.jpg");
	if (!srcImage.data)
		return 1;
	imshow("srcImage", srcImage);
	vector<Mat> planes;
	split(srcImage, planes);
	imshow("B", planes[0]);
	imshow("G", planes[1]);
	imshow("R", planes[2]);
	waitKey(0);
	return 0;
}

実行結果を図に示します

カラー画像処理では、通常、最初にチャネルが分離され、各単一チャネルが個別に処理されてからマージされます。

2. 画像のグレースケール処理

#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;
int main() {
    
    
	//读取源图像并转化为灰度图像
	cv::Mat srcImage = imread("...\\dog.jpg");
	if (!srcImage.data)
		return 1;
	//读取源图像并转化为灰度图像
	Mat srcGray;
	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
	//显示源图像及灰度图像
	imshow("srcImage", srcImage);
	imshow("srcGray", srcGray);
	waitKey(0);
	return 0;
}

実行結果を次の図に示します

おすすめ

転載: blog.csdn.net/Ceylan__/article/details/129388555