うねり
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関数は、指定された形状とサイズの構造要素を返します。