opencv学習21:シルクハット、ブラックハット、形態学的勾配

ここに画像の説明を挿入ここに画像の説明を挿入ここに画像の説明を挿入

1.トップハット

シルクハットとも呼ばれ、元の画像とオープン操作後に取得された画像の違いです。
トップハット画像=元の画像-
ノイズの多い画像を取得するためのオープン操作画像
オープン操作:最初に腐食、次に膨張
使用法:morphologyEx
cv2.MORPH_TOPHAT
result = cv2.morphologyEx(元の画像、cv2.MORPH_TOPHAT、コンボリューションカーネル)
コンボリューションカーネルの例: k = np.ones((10,10)、np.uint8)のコードは
次のとおりです。

import cv2 as cv
import numpy as np

def top_hat_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
    dst = cv.morphologyEx(gray, cv.MORPH_TOPHAT, kernel)
    cv.imshow("tophat", dst)

src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/kaibi.png")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
top_hat_demo(src)
#black_hat_demo(src)
#hat_binary_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

スクリーンショットを実行します。
ここに画像の説明を挿入

第二に、黒い帽子BLACKHAT

黒い帽子の画像=閉じた操作の画像-元の画像画像の
内側に小さな穴、または前景に小さな黒い点を取得します。
閉じた操作:最初に画像を拡大してから腐食します。前景オブジェクトの小さな穴や小さな黒い斑点を閉じるのに役立ちます。
オブジェクトの使用:バイナリイメージ
使用方法:morphologyEx
cv2.MORPH_BLACKHAT
result = cv2.morphologyEx(元のイメージ、cv2.MORPH_BLACKHAT、畳み込みカーネル)
畳み込みカーネルの例:k = np.ones((10,10)、np.uint8)
コード以下のとおりであります:

import cv2 as cv
import numpy as np

def black_hat_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
    dst = cv.morphologyEx(gray, cv.MORPH_BLACKHAT, kernel)
    cimage = np.array(gray.shape, np.uint8)
    cimage = 100;
    dst = cv.add(dst, cimage)
    cv.imshow("blackhat", dst)

src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/kaibi.png")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
top_hat_demo(src)
#black_hat_demo(src)
#hat_binary_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

スクリーンショットを実行する:
コードはグレースケールまたはバイナリイメージに基づいています。
畳み込みカーネルのサイズが異なると、得られるノイズホワイトポイントも異なります。
ここに画像の説明を挿入

3、勾配演算

形態学的勾配は膨張と侵食の違いであり、結果は前景オブジェクトの輪郭のように見えます。計算された勾配には、次の3つの一般的なタイプがあります。
基本勾配:
基本勾配は、OpenCVでサポートされている形態学的勾配を計算する方法でもある勾配画像と呼ばれる拡張画像から腐食画像を差し引いて得られる差分画像です。この方法結果のグラデーションは、基本グラデーションとも呼ばれます。

内部勾配:
差分画像は、元の画像から腐食した画像を差し引くことによって取得されます。これは、画像の内部勾配と呼ばれます。

外部勾配:
拡大された画像から元の画像を差し引いて得られる差分画像は、画像の外部勾配と呼ばれます。

オブジェクトエッジの抽出
基本的なグラデーション操作result = cv2.morphologyEx(source image img、cv2.MORPH_GRADIENT、convolution kernel k)
3.1基本的なグラデーション
コードは次のとおりです。

import cv2 as cv
import numpy as np

def gradient2_demo(image):
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
    dm = cv.dilate(image, kernel)
    em = cv.erode(image, kernel)
    dst1 = cv.subtract(image, em) # internal gradient
    dst2 = cv.subtract(dm, image) # external gradient
    cv.imshow("internal", dst1)
    cv.imshow("external", dst2)



src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/kaibi.png")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
gradient2_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

スクリーンショットを実行する:
ここに画像の説明を挿入3.2内部グラデーションと外部グラデーション

import cv2 as cv
import numpy as np

def gradient2_demo(image):
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
    dm = cv.dilate(image, kernel)
    em = cv.erode(image, kernel)
    dst1 = cv.subtract(image, em) # internal gradient
    dst2 = cv.subtract(dm, image) # external gradient
    cv.imshow("internal", dst1)
    cv.imshow("external", dst2)



src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/kaibi.png")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
cv.imshow("input image", src)
gradient2_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

スクリーンショットを実行します。
ここに画像の説明を挿入

おすすめ

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