画像処理のPython + OpenCVの他の形態学的操作

トップハット(トップハット):

周囲の領域よりも明るく、元の画像と開動作の間の差分画像、元の投影画像

ブラックハット(ブラックハット):

操作画像の差分画像と原画像、周囲の領域よりも暗い原投影画像を閉じます

形態学的グラデーション(グラデーション):

勾配ベース:エッチング後の差分画像を取​​得するために展開された画像を減算することにより、ベース勾配画像、勾配画像の形態学的勾配OpenCVの算出方法と呼ぶ支持されており、この方法は、基本的な勾配の勾配として知られています。

内部勾配:内部勾配画像として知られる腐食を差し引いた差分画像後の原画像との画像です。

外側勾配:差分マイナス画像展開後に得られた原画像は、外部の勾配画像と呼びます。

トップハットとPythonを達成した結果

DEF top_hat_demo(画像):
    灰色 = cv2.cvtColor(画像、cv2.COLOR_BGR2GRAY)
    カーネル = cv2.getStructuringElement(cv2.MORPH_RECT、(5,5 ))
    DST = cv2.morphologyEx(灰色、cv2.MORPH_TOPHAT、カーネル)
     提升亮度 
    のCImage = np.array(gray.shape、np.uint8)
    のCImage = 100 
    DST = cv2.add(DST、のCImage)
    cv2.imshow(" top_hat_demo "、DST)

 

ブラックハットのPython実装と結果

DEF black_hat_demo(画像):
    灰色 = cv2.cvtColor(画像、cv2.COLOR_BGR2GRAY)
    カーネル = cv2.getStructuringElement(cv2.MORPH_RECT、(5,5 ))
    DST = cv2.morphologyEx(灰色、cv2.MORPH_BLACKHAT、カーネル)
     提升亮度 
    のCImage = np.array(gray.shape、np.uint8)
    のCImage = 100 
    DST = cv2.add(DST、のCImage)
    cv2.imshow(" black_hat_demo "、DST)

 

 オーバーキャップと黒二値画像キャッパー

def threshold_top_hat_demo(image):  # 二值图像顶帽操作
    gray = cv2.cvtColor(image, cv2.COLOR_BGRA2GRAY)
    ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    dst = cv2.morphologyEx(thresh, cv2.MORPH_TOPHAT, kernel)
    cv2.imshow("dst", dst)


def threshold_black_hat_demo(image):  # 二值图像黑帽操作
    gray = cv2.cvtColor(image, cv2.COLOR_BGRA2GRAY)
    ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    dst = cv2.morphologyEx(thresh, cv2.MORPH_BLACKHAT, kernel)
    cv2.imshow("dst", dst)

形态学梯度操作

def gradient1_demo(image):
    cv2.imshow("image", image)
    gray = cv2.cvtColor(image, cv2.COLOR_BGRA2GRAY)
    ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    dst = cv2.morphologyEx(thresh, cv2.MORPH_GRADIENT, kernel)  # 基本梯度
    cv2.imshow("dst", dst)


def gradients2_demo(image):
    cv2.imshow("image", image)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    dm = cv2.dilate(image, kernel)
    em = cv2.erode(image, kernel)
    dst1 = cv2.subtract(image, em)  # 内部梯度
    dst2 = cv2.subtract(dm, image)  # 外部梯度
    cv2.imshow("internal", dst1)
    cv2.imshow("external", dst2)

内部梯度,外部梯度结果

 

おすすめ

転載: www.cnblogs.com/qianxia/p/11106408.html