1. 形態素演算
OpenCV は、腐食、拡張、オープニング操作、クローズ操作などの形態学的操作を実行するための豊富な関数を提供します。一般的に使用される OpenCV の形態素演算関数をいくつか示します。
-
侵食:
erode(src, dst, kernel, anchor, iterations, borderType, borderValue)
この関数は、入力画像の前景領域に対して侵食操作を実行し、領域内のピクセル値を構造要素の最小値に置き換えることによって前景領域を縮小します。 -
膨張:
dilate(src, dst, kernel, anchor, iterations, borderType, borderValue)
この関数は、入力画像の前景領域に対して膨張操作を実行し、領域内のピクセル値を構造要素の最大値に置き換えることによって前景領域を拡大します。 -
オープニング:
morphologyEx(src, dst, MORPH_OPEN, kernel, anchor, iterations, borderType, borderValue)
オープニング操作では、最初に画像を侵食し、次に拡張操作を実行します。この操作により、小さなノイズが除去され、画像の境界が滑らかになります。 -
クロージング:
morphologyEx(src, dst, MORPH_CLOSE, kernel, anchor, iterations, borderType, borderValue)
クロージング操作では、最初に画像を拡大し、次に収縮操作を実行します。この操作により、小さな穴が埋められ、画像のエッジが滑らかになります。 -
グラデーション:
morphologyEx(src, dst, MORPH_GRADIENT, kernel, anchor, iterations, borderType, borderValue)
グラデーション操作では、入力画像を膨張および侵食することでエッジを強調表示できます。 -
トップ ハット:
morphologyEx(src, dst, MORPH_TOPHAT, kernel, anchor, iterations, borderType, borderValue)
トップ ハットは、入力イメージと開いた操作の結果の違いを比較することで、エッジと詳細を強調表示できます。 -
ブラック ハット:
morphologyEx(src, dst, MORPH_BLACKHAT, kernel, anchor, iterations, borderType, borderValue)
ブラック ハット操作では、閉じた操作結果と入力画像の違いを比較することで、エッジや細部を強調表示できます。
上記関数において、src
入力画像、dst
出力画像、kernel
構造要素、anchor
構造要素のアンカーポイント位置、反復回数iterations
、borderType
境界画素処理方法、borderValue
それは境界ピクセルの値です。
2. 関連関数 morphologyEx()
MorphologyEx() は、形態学演算用の OpenCV ライブラリ内の関数の 1 つです。浸食、拡張、開く操作、閉じる操作などの一連の形態学的操作を実行できます。この関数のプロトタイプは次のとおりです。
ボイド形態Ex(
入力配列ソース、
出力配列 dst、
イントオン、
入力配列カーネル、
ポイントアンカー = ポイント(-1,-1),
整数反復 = 1、
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue()
);
この関数のパラメータには次のものが含まれます。
-
src: 入力画像または画像配列。
-
dst: 出力画像または画像配列。
-
op: 形態素演算の種類を指定します。
-
kernel: 形態素演算に使用される構造要素 (カーネル)。
-
アンカー: 構造要素の中心の位置。デフォルトは (-1, -1) で、構造要素の中心位置がコアの中心であることを意味します。
-
iterations: 形態学的操作を実行するための反復数。デフォルトは 1 です。
-
borderType: 境界ピクセルの処理方法。デフォルトは BORDER_CONSTANT です。
-
borderValue: borderType が BORDER_CONSTANT の場合の境界ピクセルの値を指定します。デフォルトは morphologyDefaultBorderValue() です。
その中で、形態学的操作の種類は次のとおりです。
3. サンプルコード:
void image_morphologyEx(Mat image){
Mat gray;
cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
threshold(gray,gray,80,255,THRESH_BINARY);
//5×5矩阵结构元素
Mat kernel= getStructuringElement(0,Size(5,5));
Mat open,close,gradient,tophat,blackhat;
//对图像进行开运算
morphologyEx(gray,open,MORPH_OPEN,kernel);
//对图像进行闭运算
morphologyEx(gray,close,MORPH_CLOSE,kernel);
//对图像进行梯度运算
morphologyEx(gray,gradient,MORPH_GRADIENT,kernel);
//对图像进行顶帽运算
morphologyEx(gray,tophat,MORPH_TOPHAT,kernel);
//对图像进行黑帽运算
morphologyEx(gray,blackhat,MORPH_BLACKHAT,kernel);
}