OpenCV-Python画像分割操作cv2.divide関数と画像分割処理

☞░GoにLaoYuanPythonblog░https://blog.csdn.net/LaoYuanPython

I.はじめに

OpenCV-Python画像乗算演算cv2.multiply関数詳細説明とピクセル値オーバーフロー正規化処理」では、OpenCV-Python乗算演算の詳細を紹介します。この記事では、画像乗算と画像分割の逆演算を紹介します。

2つの画像マトリックスAおよびBの場合:
ここに写真の説明を挿入
OpenCVの2つの画像マトリックスの分割計算方法は次のとおりです。
ここに写真の説明を挿入

2、画像文法分割文法

呼び出し構文:

divide(src1, src2, dst=None, scale=None, dtype=None)

パラメータの説明:

乗算文法を比較すると、分割文法のパラメータはまったく同じです。OpenCVマニュアルで紹介されている分割関連の文法内容の説明は次のとおりです。

  1. src1:被除数としての画像配列
  2. src2:乗数と除算器として使用される画像配列、サイズとタイプはsrc1と同じです
  3. dst:オプションのパラメーター、出力結果を保存するための変数、デフォルト値はNone、Noneでない場合、出力画像はdstの対応する実際のパラメーターに保存され、そのサイズとチャネル番号は入力画像と同じです。画像の深さ(つまり、画像ピクセル)桁数)は、dtypeパラメータまたは入力画像によって決定されます
  4. scale:オプションの結果画像スケーリング係数。つまり、画像計算プロセスはsrc1 * scale / src2です。
  5. マスク:イメージマスク、オプションパラメータ、8ビットシングルチャネルグレースケールイメージ。変更する出力イメージアレイの要素を指定するために使用されます。つまり、出力イメージピクセルは、マスクの対応する位置要素が0でない場合にのみ出力されます。それ以外の場合。この位置のピクセルのすべてのチャネルコンポーネントは0に設定されます
  6. dtype:オプションのパラメーター、出力画像配列の深さ、つまり、画像の単一ピクセル値のビット数(RGBが3バイトで表される場合、24ビット)。
  7. 戻り値:除算の結果画像

3つの画像分割の使用シナリオ

画像分割のシーンでは、src1とsrc2の2つの入力データは乗算と同じです。OpenCVドキュメントでは、2つは同じサイズとタイプである必要があると記載されています。一方がスカラーであるとは言われていません。古いサルによる実際の検証は、乗算のように使用できます。 4倍、スケールの使用を含む他の側面は同じです。詳細については、OpenCV-Python画像乗算操作cv2.multiply関数の詳細とピクセル値オーバーフロー正規化処理の概要を参照してください。したがって、次の概要では、2つの実際の画像が分割されるシーン。

関連情報を参照してください。2つの画像の分割を使用して、照明またはセンサーの不均一性によって引き起こされる画像の灰色の影を修正できます。また、比率画像の生成にも使用できます。これら二つの目的に関して、古い類人猿はまだ理解されておらず、例も見つかっていません。しかし、ラオス元はテストを行い、2つの近似画像を分割して2つの違いを見つけることもできます。次の例で紹介します。

ケース原画

以下は、shape1.pngとshape2.png
ここに写真の説明を挿入
の2つの画像です。これら2つの画像はサイズがまったく同じですが、形状や色にいくつかの違いがあります。

分割処理には次のコードを使用します。

import numpy as np
import cv2
def main():
    img1 = cv2.imread(r'F:\pic\shape1.png').astype(np.float32)
    img2 = cv2.imread(r'F:\pic\shape2.png').astype(np.float32)
    img1DivImg2 = cv2.divide(img1, img2)
    img2DivImg1 = cv2.divide(img2, img1)

    imgNormalize1 = cv2.normalize(img1DivImg2,None,0,255,cv2.NORM_MINMAX)
    imgNormalize2 = cv2.normalize(img2DivImg1, None, 0, 255, cv2.NORM_MINMAX)  # opencv归一化处理

    cv2.imshow('shape1', img1.astype(np.uint8))
    cv2.imshow('shape2', img2.astype(np.uint8))
    cv2.imshow('img1DivImg2', img1DivImg2.astype(np.uint8))
    cv2.imshow('imgNormalize1', imgNormalize1.astype(np.uint8))
    cv2.imshow('imgNormalize2', imgNormalize2.astype(np.uint8))

    cv2.waitKey(0)


main()

実行結果のスクリーンショット:上
ここに写真の説明を挿入
の2つの画像は元の画像です。上の最初の画像は、shape1.pngをshape2.pngで割った後の正規化の結果です。上の2番目の画像は、shape2.pngをshape1.pngで割った結果です。正規化プロセスの結果、上の3番目の図は、正規化なしのshape2.pngを除くshape1.pngの結果です。

画像分割の使用について注意すべき3つのポイントがあります。

  1. 2つの画像を分割した後のマトリックス要素の値のほとんどは非常に小さいため、正常に表示されるように正規化する必要があります。
  2. 画像分割はnp.float32に基づいて実行する必要があります。そうしないと、精度が低下し、マトリックス要素の結果を正規化すると、多くの0が表示されます。
  3. 除数を0にすることはできないため、除数として使用する画像が黒く表示されると、マトリックスにnumpy nan値が表示されます。nan値が表示された後、その後の正規化処理とマトリックスの画像表示が異常になるため、[なし]を選択します。除数としての黒いコンテンツ画像

3、まとめ

この記事では、OpenCV-Pythonイメージ分割操作cv2.divide関数の構文を詳しく紹介します。divide関数の構文は、基本的に乗算のmultiply関数と同じであり、2つの使用シナリオも同じです。画像の分割と乗算は画像の明るさを調整でき、画像間の分割方法は画像の類似点と相違点を見つけるために減算と同じにすることができますが、使用にはいくつかの制限があり、効果は一般に減算ほど良くありません。

OpenCV-Pythonの詳細については、「OpenCV-Pythonグラフィックスと画像処理」の列を参照してください。

ブログアドレスhttps//blog.csdn.net/laoyuanpython/category_9979286.html

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

Lao Yuanの有料コラム「PyQtを使用したグラフィカルインターフェースPythonアプリケーションの開発」(https://blog.csdn.net/laoyuanpython/category_9607725.html)では、PythonベースのPyQtグラフィカルインターフェース開発の基本的なチュートリアルと、有料コラム「映画のようなオーディオとビデオの開発」を具体的に紹介しています。コラム」(https://blog.csdn.net/laoyuanpython/category_10232926.html)では、映画のようなオーディオとビデオの編集と合成の関連する方法と、関連する編集と合成のシーンを処理するための関連する方法の使用について詳しく紹介しています。どちらのコラムも特定のシーンに適しています。基本的なPythonを持っているが、関連する知識がない初心者の読者は学びます。

有料コラム記事ディレクトリ:「moviepyオーディオおよびビデオ開発コラム記事ディレクトリ」(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、「PyQtを使用してグラフィカルインターフェイスPythonアプリケーションコラムディレクトリを開発する」(https:// blog.csdn.net/LaoYuanPython/article/details/107580932)。

Pythonの基礎が不足している場合は、Lao Yuanの無料のコラム「Column:Python Basic Tutorial Directory」(https://blog.csdn.net/laoyuanpython/category_9831699.html)からPythonを最初から学ぶことができます

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

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

☞░LaoYuanPythonブログ投稿ディレクトリhttps://blog.csdn.net/LaoYuanPython░に移動します

おすすめ

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