Python-OpenCV適応しきい値画像処理は、adaptiveThreshold関数を使用して画像の輪郭を取得します

☞░古い猿のPythonBowenディレクトリへ

I.はじめに

OpenCVしきい値処理機能しきい値処理32ビットカラー画像の場合」では、しきい値機能が導入されましたが、一部の不均一な照明画像のしきい値画像しきい値処理では、このグローバルしきい値セグメンテーション方法では良好な結果が得られません。

画像のしきい値操作では、ターゲット領域と背景領域を2値化された画像から分離することに関心があり、固定のしきい値だけで理想的なセグメンテーション効果を実現することは困難です。写真のグレースケールは均一ではないため、通常、写真のさまざまな領域のしきい値は異なります。このように、画像のさまざまな領域の明るさまたは灰色の分布に従ってローカルしきい値を計算することにより、しきい値処理を実行する方法が必要です。この方法は、適応しきい値画像処理です。実際、これはローカルしきい値方法と呼ぶことができます。OpenCVのadaptiveThresholdはこの方法です。

2、adaptiveThreshold構文の紹介

呼び出し構文:
adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

説明:

  • src:ソースイメージ。8ビットのグレースケールイメージである必要があります
  • dst:処理されたターゲット画像、サイズ、タイプはソース画像と同じです
  • maxValue:条件を満たすピクセル設定のグレー値を指定するために使用されます
  • AdaptiveMethod:使用される適応しきい値アルゴリズム。ADAPTIVE_THRESH_MEAN_Cアルゴリズム(ローカル近傍ブロック平均)またはADAPTIVE_THRESH_GAUSSIAN_C(ローカル近傍ブロックガウス加重和)の2つのタイプがあります。ADAPTIVE_THRESH_MEAN_Cの計算方法は、近傍の平均値を計算し、最初の値を減算することです。 ADAPTIVE_THRESH_GAUSSIAN_Cの計算方法である6つのパラメーターCの値は、近傍のガウス均一値を計算してから、6番目のパラメーターCの値を減算することです。境界を処理するときは、BORDER_REPLICATE | BORDER_ISOLATEDモードを使用します
  • thresholdType:しきい値タイプ。THRESH_BINARYまたはTHRESH_BINARY_INVのいずれかのみです。詳細については、上記の「画像しきい値処理」の表を参照してください。
  • blockSize:エリアしきい値の計算に使用される近傍ブロックのサイズを示します。通常は3、5、7を選択します。
  • C:定数を表します。これは、均一または加重平均から抽出された定数で、通常は正の数値ですが、負の数値またはゼロの場合もあります。
  • 戻り値:処理された画像

3、補足説明

  1. 通常、輝度の高い画像領域の2値化しきい値は高くなり、輝度の低い画像領域の2値化しきい値は小さくなります。
  2. グレースケール画像では、グレースケール値が明らかに変化する領域がオブジェクトの輪郭であることが多いため、画像を小さなブロックに分割してしきい値を計算すると、画像の輪郭が得られることがよくあります。したがって、関数adaptiveThresholdは、グレースケールイメージを二値化するだけでなく、エッジ抽出も実行できます。
  3. エッジ抽出の理由は、block_size = 3または5または7のようにブロックが非常に小さい場合、「適応」の程度が非常に高いためです。つまり、ブロック内のピクセル値がほぼ同じであるように見えやすく、2値化できないためです。 、しかし、エッジで勾配が大きい場合にのみ2値化を実現でき、エッジ抽出機能であることがわかります。
  4. blockSizeがblockSize = 21、31、41などの比較的大きな値に設定されている場合、adaptiveThresholdはバイナリ関数です。
  5. blockSizeは1より大きい奇数でなければなりません(原則はまだ不明です)、
  6. 平均値法を使用する場合、平均値は180、差デルタは10、maxValueは255です。次に、グレースケールが170未満のピクセルは0、170以上のピクセルは255、逆2値化の場合、グレースケールが170未満のピクセルは255、170以上のピクセルは0です。

4、ケース

import cv2

img = cv2.imread(r'F:\screenpic\1.jpg',cv2.IMREAD_GRAYSCALE)
newImg = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 3, 5)
cv2.imshow('img',img)
cv2.imshow('newImg',newImg)
cv2.waitKey(60000)

動作効果:
ソース画像:
ここに写真の説明を挿入
以下は、異なるblockSizesを設定した結果の画像です。左の画像のブロックサイズは31、右の画像のblockSizeは3です
ここに写真の説明を挿入
。blockSizeが小さく、輪郭認識効果が明らかで、blockSizeが大きい場合はバイナリであることがわかります。画像。

古い猿についての有料コラム

Lao Yuanの有料コラム「PyQtを使用したグラフィカルインターフェースPythonアプリケーションの開発」では、Pythonに基づくPyQtグラフィカルインターフェース開発の基本的なチュートリアルを具体的に紹介し、有料コラム「Moviepy Audio and Video Development Column」では、Moviepyオーディオおよびビデオの編集と合成処理の関連方法と使用法について詳しく説明しています。この方法は、関連する編集および合成シーンの処理に使用されます.2つの列の合計はわずか19.9元であり、特定のPython基盤を持っているが、関連する特許知識がない初心者の読者に適しています。これらの2つの有料の列には対応する無料の列がありますが、有料の列の記事はより具体的で、より詳細で、より多くのケースがあります。

有料コラム記事カタログ:「Moviepyオーディオおよびビデオ開発コラム記事ディレクトリ」、「PyQtを使用してグラフィカルインターフェイスPythonアプリケーションコラムディレクトリを開発する」。

Moviepyオーディオおよびビデオ開発の内容についてはPythonオーディオおよびビデオクリップライブラリMoviePy1.0.3中国語チュートリアルガイドおよび実行可能ツールのダウンロード」のガイド付き紹介を参照しください

Pythonの基礎が不足している場合は、Lao Yuanの無料のコラム「Column:Python Basic Tutorial Directoryを通じて、Pythonを最初から学ぶことができます

Old Apeの読者に興味があり、喜んでサポートする場合は、有料のコラムを購入することを歓迎します。

古い猿からPythonを学びましょう!

☞░古い猿のPythonBowenディレクトリへ

おすすめ

転載: blog.csdn.net/LaoYuanPython/article/details/108558834