Opencvベースの画像の読み取りと書き込みおよび形態学的操作

画像の読み書き

Matクラスを使用して、読み書きが必要な画像を保存します。Matクラスは、画像やその他の行列データを保存するために使用されるデータ構造です

ファイル内の画像をOpenCVに読み取るためにimread()関数が使用され、説明は次のとおりです:
Mat imread(const string&filename、intflags = 1);
最初のパラメーター、const string&type filename、ロードする必要のある画像パスを入力しますWindowsオペレーティングシステムでのOpenCVのimread関数は、次のタイプのイメージの読み込みをサポートしています。
2番目のパラメータであるintタイプのフラグは、ロードされた画像のカラータイプを指定するロードフラグです。

imshow()関数は、指定されたウィンドウにイメージを表示するために使用されます。関数のプロトタイプは次のとおりです。
void imshow(const string&winname、InputArray mat);
最初のパラメーターconst string&type winnameは、表示されるウィンドウ識別名を入力します。
2番目のパラメーター、InputArrayタイプのマットは、表示される画像を埋めます。

imwrite関数は、イメージをファイルに出力するために使用され、その宣言は次のとおりです:
bool imwrite(const String&filename、InputArray img、const std :: vector&params = std :: vector());
最初のパラメーターconst String&filenameは、何を書き込む必要があるかを示しますファイル名は「123.png」のようにサフィックスを付ける必要があります。
2番目のパラメーターInputArray imgは、Matタイプの画像データを表します。

	Mat image = imread("E:\\picture\\lena.jpg");
	imshow("原始图", image);
	imwrite("E:\\picture\\lenaout.jpg", image);
	waitKey(0);

ここに画像の説明を挿入

形態学的操作

腐食操作:
名前が示すように、オブジェクトのエッジを腐食します。具体的な操作方法は、幅mと高さnの長方形をテンプレートとして使用し、画像内の各ピクセルxに対して次の処理を実行します。ピクセルxはテンプレートのサイズに応じてテンプレートの中心にあり、テンプレートでカバーされている他のすべてのピクセルをトラバースします。ピクセルxの値を変更して、すべてのピクセルの中で最小の値にします。この操作の結果、画像の周辺の顕著なポイントが腐食します。以下に示す操作プロセス:
  ここに画像の説明を挿入

	Mat image = imread("E:\\picture\\lena.jpg");
	imshow("原始图", image);

	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstimg;
	erode(image, dstimg, element);
	imshow("腐蚀", dstimg);

	imwrite("E:\\picture\\lenaout.jpg", dstimg);
	waitKey(0);

ここに画像の説明を挿入
拡大操作:
拡大操作は、画像の輪郭を拡大する腐食操作の逆です。操作方法は腐食操作に似ており、長方形のテンプレートを使用して、画像の各ピクセルをトラバースします。違いは、変更されたピクセルの値がすべてのピクセルの中で最小値ではなく、最大値であることです。この操作の結果は、画像の周辺の目立つ点を接続して拡張します。以下に示す操作プロセス:

ここに画像の説明を挿入

	Mat image = imread("E:\\picture\\lena.jpg");
	imshow("原始图", image);

	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstimg;
	dilate(image, dstimg, element);
	imshow("膨胀", dstimg);

	imwrite("E:\\picture\\lenaout.jpg", dstimg);
	waitKey(0);

ここに画像の説明を挿入
オープンオペレーション:

機能:大きなオブジェクトの境界を滑らかにするときに、クラックと低密度領域を拡大し、小さなオブジェクトを排除し、それらの領域を変更しません。オブジェクトの表面の突起を取り除きます。
開く操作は、最初に画像を腐食し、次に拡大することです。腐食と膨張に使用されるテンプレートは同じサイズです。開く操作の効果を説明するために、次の図の操作プロセスを参照してください。

ここに画像の説明を挿入

	Mat image = imread("E:\\picture\\lena.jpg");
	imshow("原始图", image);

	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstimg;
	morphologyEx(image, dstimg, MORPH_OPEN, element);
	imshow("开操作", dstimg);

	imwrite("E:\\picture\\lenaout.jpg", dstimg);
	waitKey(0);

ここに画像の説明を挿入

クローズ操作:

機能:小さなブラックホールを除外し、元の画像の輪郭領域よりも暗い領域をシナプスし、2つの領域を接続して、接続されたドメインを形成します。
閉じる操作は、画像を拡大してから腐食することです。クローズ操作の結果として、多くのクローズタイルは、突起のない接続ドメインとして接続できます。
ここに画像の説明を挿入

	Mat image = imread("E:\\picture\\lena.jpg");
	imshow("原始图", image);

	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstimg;
	morphologyEx(image, dstimg, MORPH_CLOSE, element);
	imshow("闭操作", dstimg);

	imwrite("E:\\picture\\lenaout.jpg", dstimg);
	waitKey(0);

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_36587495/article/details/108553806