opencvラーニング19:膨張と腐食

うねり

ここに画像の説明を挿入**大胆なスタイル**ここに画像の説明を挿入ここに画像の説明を挿入

1つ:拡張して拡張を達成する

使用方法:
dilate result = cv2.dilate(binary image src、convolution kernel k、itreations)
畳み込みカーネルの正方形配列:np.ones((5,5)、np.uint8)など

import cv2 as cv
import numpy as np

def dilate_demo(image):  #膨胀
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    dst = cv.dilate(binary,kernel)
    cv.imshow("dilate_demo",dst)

src = cv.imread("./5.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系

dilate_demo(src)

cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

説明:
opencvを使用する過程で、さまざまな畳み込みカーネルが必要になることがよくあります。正方形のコアの場合はnumpyを使用できますが、楕円形または十字形のコアを定義する必要がある場合は、構造要素を使用する必要があります

cv2.getStructuringElement()の
最初のパラメーターは、コアの形状を表します。3種類の
長方形を選択できます:MORPH_RECT;
十字形:MORPH_CROSS;
楕円形:MORPH_ELLIPSE;
2番目のパラメーターはコアのサイズを示します。

オブジェクトは白でなければならないことに注意してください。この記事のオブジェクトは黒なので、コードで非バイナリ化を使用します。
ここに画像の説明を挿入

2:腐食侵食を達成するため

腐食は主に、0と1の2つの値のみ、
2つの入力オブジェクトなどのバイナリイメージ用です:1つの元のバイナリイメージ、2つのコンボリューションカーネル
は、コンボリューションカーネルが要素に対応している場合、コンボリューションカーネルを使用して元のバイナリイメージをトラバースします値は1で、値は1です。それ以外の場合は、0です。
つまり、現在の中央のピクセルを、畳み込みカーネルに対応する最小の要素に置き換えます。

腐食効果:オブジェクトのサイズが1ピクセル縮小され、オブジェクトのエッジが滑らかになり、画像間の半島の接続が弱くなるか、セグメント化されます。

使用法:侵食中国語の翻訳:侵食
処理結果= cv2.erode(元の画像src、畳み込みカーネルカーネル、反復)
畳み込みカーネルカーネル:通常、次の
ような正方形の配列:k = np.ones((5,5)、np.uint8 )
反復回数反復回数:腐食回数、デフォルトは1

def erode_demo(image):  #腐蚀
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))  #可以修改卷积核大小来增加腐蚀效果,越大腐蚀越强
    dst = cv.erode(binary,kernel)
    cv.imshow("erode_demo",dst)

src = cv.imread("./5.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系

erode_demo(src)

cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

ここに画像の説明を挿入

kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))

ここに画像の説明を挿入
関連知識補足
(1)白の領域を拡大するための拡大と見なすことができ、腐食は黒の領域を拡大する
ことです(2)グレースケール処理なしでカラー画像を処理することが可能です。
(1)拡大

kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.dilate(src,kernel)
cv.imshow("result",dst)

ここに画像の説明を挿入(2)腐食

kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.erode(src,kernel)
cv.imshow("result",dst)

ここに画像の説明を挿入(3)getStructuringElementメソッド

構造要素カーネルをカスタマイズするには、マットを宣言してから、マットの要素に値を割り当てる必要があります;このメソッドは柔軟性がありますが、少し複雑です

OpenCVは関数getStructuringElementを提供します。この関数は、一般的に使用される構造要素(長方形(線を含む)、楕円(円を含む)、および十字)の形状を取得できます。

getStructuringElement内には最適化はなく、いくつかの関数をカプセル化するだけです。原則は、マットを宣言し、形状を見つけて、マットの値を指定することでもあります。
十字形は一本の線幅です。

要するに:getStructuringElementはカーネルを実装するためのより便利な方法です

MORPH_RECT、MORPH_ELLIPSE、MORPH_CROSS

パラメータ:

cv.getStructuringElement(cv.MORPH_RECT、(3、3))

def getStructuringElement(shape、ksize、anchor = None):#実際の署名は不明です。ドキュメントから復元

最初のパラメーターの形状:カーネルの形状を表します。3つの形状から選択できます。

長方形:MORPH_RECT;
クロス:MORPH_CORSS;
楕円形:MORPH_ELLIPSE;

2番目のパラメーターksize:はカーネルのサイズです(n、n)

3番目のパラメーターアンカー:アンカーポイントの位置

戻り値:
getStructuringElement関数は、指定された形状とサイズの構造要素を返します。

おすすめ

転載: blog.csdn.net/weixin_44145452/article/details/112798499