OpenCV-Pythonで一般的に使用される画像操作:加算、減算、乗算、除算、電力抽出の対数およびビット操作

☞░GoLaoYuanPythonはhttps://blog.csdn.net/LaoYuanPythonブログ

I.はじめに

この記事を書く前に、ラオスユアンはすでに画像を個別に学習しながらいくつかの計算を投稿していましたが、これらの記事を書く過程で、これらの計算関数には多くの共通点があることがわかりました。たとえば、ほとんどのパラメータが同じである、一部の処理方法が同じであるなどです。同じまたは同様の効果を達成できる機能もいくつかあるので、以前の記事に基づいて、それらは全体に統合されて公開され、誰もが読むのに便利です。

OpenCVでは、画像はマトリックスとして保存されるため、画像操作は実際にはマトリックス操作です。画像操作には、主に画像の基本的な算術演算、画像の重み付け操作(画像融合とも呼ばれる)、およびビット単位の操作が含まれます。これらの操作は、numpyマトリックスを介して直接実行することも、opencvの専用メソッドを介して実行することもできますが、opencvのマトリックス操作とnumpyマトリックス操作はまだ多少異なります。たとえば、加算処理では、OpenCV加算は飽和操作(255を超える場合は255を押します)ですが、Numpy加算はモジュロ演算です(255を超えると、結果はモジュロ256になります)。また、色の値が大きいほどOpenCVの結果が良くなるため、算術演算にはOpenCVを使用することをお勧めします。この記事の内容はすべてOpenCVメソッドに基づいています。

2、OpenCVイメージ操作構文

2.1、画像操作機能一覧

OpenCVイメージ操作には、次の機能が含まれます。

  1. 追加操作:add(src1, src2, dst=None, mask=None, dtype=None)
  2. 減算操作:subtract(src1, src2, dst=None, mask=None, dtype=None)
  3. 乗算操作:multiply(src1, src2, dst=None, scale=None, dtype=None)
  4. 分割操作:divide(src1, src2, dst=None, scale=None, dtype=None)
  5. 指数:pow(src, power, dst=None)
  6. スクエアルート操作:sqrt(src, dst=None)
  7. 自然定数eをベースとする指数関数:exp(src, dst=None)
  8. 対数演算:log(src, dst=None)
  9. フュージョンウェイトの追加:addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
  10. ビットと操作:bitwise_and(src1, src2, dst=None, mask=None)
  11. ビット単位のOR操作:bitwise_or(src1, src2, dst=None, mask=None)
  12. ビット単位のXOR操作:bitwise_xor(src1, src2, dst=None, mask=None)
  13. ビットNOT操作:bitwise_not(src, dst=None, mask=None)

2.2。画像操作の一般的なパラメータの説明

  • src:入力画像マトリックス
  • src1、src2:同じサイズとチャネル数の2つの入力画像、または1つの入力画像とスカラー(スカラーについては、「OpenCV-Pythonのスカラーとは」を参照してください
  • dst:入力画像と同じサイズを必要とするターゲット画像出力。値が渡された場合、実際のパラメータをターゲット画像ストレージ変数として直接使用できます。それ以外の場合、関数の戻り値をターゲット画像ストレージ変数として使用できます。実際のパラメータがNoneに渡されなかった場合、戻り値は実際のパラメータ値と同じです
  • scale:スケーリング係数。画像操作を実行するときは、最初にsrc1 * scaleを実行してから、その製品を後続の操作に使用します。
  • マスク:イメージマスク、オプションパラメータ、8ビットシングルチャネルグレースケールイメージ。変更する出力イメージアレイの要素を指定するために使用されます。つまり、出力イメージピクセルは、マスクの対応する位置要素が0でない場合にのみ出力されます。それ以外の場合。この位置にあるピクセルのすべてのチャネルコンポーネントは0に設定されます。マスクの詳細については、「OpenCV Learning02-マトリックスマスク操作」または「Opencv画像処理詳細マスクマスクを参照してください
  • dtype:オプションのパラメーター、出力画像配列の深さ、つまり、画像の単一ピクセル値のビット数(RGBが3バイトで表される場合、24ビット)。ヘルプドキュメントでは、パラメータsrc1とsrc2の画像の深さを変えることができます(つまり、8ビット、16ビット、24ビット、32ビットなどの画像ピクセル数)。たとえば、16ビット画像と8ビット画像を追加できます。出力結果を32ビットの出力配列に保存します。このパラメータの調査は、画像の奥行きが異なると、画像のチャンネル数が異なり、チャンネル数が異なるため、アレイのサイズが異なり、このような2つのアレイを操作できないため、時間がかかる可能性があります。ここでいう画像の深さは、チャンネル数※8ではなく、1チャンネル値で​​表されるビット数です。つまり、1チャンネルは必ずしも8ビットではなく、16ビット、24ビット、32ビットのいずれでもかまいません。ビット。理解するには、次のコードを見てください。
def main():
    img1 = cv2.imread(r'F:\pic\shape1.png').astype(np.float32)
    img2 = cv2.imread(r'F:\pic\shape2.png')
    img = cv2.add(img1,img2,dtype=24)

上記のコードは、2つの異なる表現方法で2つの画像を読み取ります。最初の画像はfloat32を使用して画像の単一チャネル値を表し、2番目の画像はデフォルト値uint8を使用して画像の単一チャネル値を表します。異なりますが、追加後、24ビットイメージに変換されます。つまり、単一チャネルは8バイトイメージになります。

2.3いくつかの画像操作機能の詳細な説明

いくつかの重要な画像操作のために、古い猿は以前に別々に導入されました:以下を含みます:

  1. OpenCV-Python画像追加操作cv2.add関数の詳細な説明
  2. OpenCV-Python画像減算操作cv2.subtract関数の詳細な説明と行列減算との比較
  3. OpenCV-Python画像乗算操作cv2.multiply関数の詳細な説明とピクセル値オーバーフロー正規化処理
  4. OpenCV-Python画像分割操作cv2.divide関数と画像分割処理
  5. OpenCV-Pythonイメージフュージョンcv2.add加重重量追加関数の詳細な説明
  6. OpenCV-Pythonイメージビットと操作bitwise_and関数の詳細な説明

2.4その他の画像操作機能の紹介

  1. 電力操作:pow(src, power, dst=None)画像の各チャネル値の電力パラメータに対応する電力を結果画像のチャネル値として計算します。電力が整数の場合は電力値を直接計算し、電力が浮動小数点数の場合はチャネル値の絶対値を取得して計算に参加します。 、これは:ここに写真の説明を挿入

  2. 平方根演算:sqrt(src, dst=None)、画像の各チャネル値の平方根を結果画像のチャネル値として取得します。つまり、次のようになります。dst(I)=sqrt(src1(I))

  3. 自然定数eをベースとする指数関数:exp(src, dst=None)、画像の各チャネル値をベースeとして、電力値計算結果画像のチャネル値とします。ここに写真の説明を挿入

  4. 対数演算:log(src, dst=None)画像の各チャネル値の自然対数を結果画像のチャネル値として計算します。つまり、次のようになります。dst(I)=ln(src(I))

  5. ビットbitwise_or(src1, src2, dst=None, mask=None)ワイズOR演算:2つの画像の各チャネル値のビットワイズORの結果、または結果画像のチャネル値として画像チャネル値とスカラーを計算します

  6. ビット単位のXOR操作:bitwise_xor(src1, src2, dst=None, mask=None)2つの画像の各チャネル値のビット単位のXOR結果、または結果画像のチャネル値として画像チャネル値とスカラーを計算します

  7. ビットなし操作:、bitwise_not(src, dst=None, mask=None)srcイメージの各チャネルの値は、結果イメージの値としてビットごとに反転されます。

三、相関関数分析の役割

  1. 画像の減算、除算、排他的ORを使用して画像の違いを分析できますが、減算と排他的ORの方が正確です。
  2. 加算、重量加算、画像または操作はすべて画像のマージに使用できますが、操作方法と操作の違いにより、効果が異なります。異なる画像の融合に選択する方法は、画像データとアプリケーションの目標に関連しています。
  3. 画像の乗算と指数化の両方を使用して、画像のコントラストを調整できます。
  4. 非操作およびXOR操作は、画像の一部の視覚効果を向上させることができます。
  5. 画像の乗算とビットANDを使用して、画像の興味深い部分を抽出したり、一部をシールドしたりできます。この点での機能は画像マスクの効果と同じですが、実装が異なります。
  6. しきい値処理、画像ネゲーション、および処理を通じて、画像の構造的特徴を抽出できます

第四に、ビット単位の操作の単純なケース

画像操作関数の詳細な説明の前の部分では、画像の加算、減算、乗算、除算、重みの加算、およびビットと関連する関数の例を示しました。これは、単純なビット単位の操作の場合です。コードは次のように表示されます。

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')

    resultImgAnd = cv2.bitwise_and(img1, img2)
    resultImgOr = cv2.bitwise_or(img1, img2)
    resultImgXor = cv2.bitwise_xor(img1, img2)
    resultImgNot = cv2.bitwise_not(img1)
    resultImgXorScalar = cv2.bitwise_xor(img1, (255,255,255,255))

    cv2.imshow('img1',img1)
    cv2.imshow('img2', img2)
    cv2.imshow('resultImgAnd', resultImgAnd)
    cv2.imshow('resultImgOr', resultImgOr)
    cv2.imshow('resultImgXor', resultImgXor)
    cv2.imshow('resultImgNot', resultImgNot)
    cv2.imshow('resultImgXorScalar', resultImgXorScalar)
    cv2.waitKey(0)

main()

実行中の画像のスクリーンショット:
ここに写真の説明を挿入

V.まとめ

この記事では、OpenCV-Pythonイメージの加算、減算、乗算、除算の対数演算とビット演算に関連する関数と構文を詳細に紹介し、関連する関数の関数を要約します。OpenCVでは、画像はマトリックスとして保存されるため、画像操作は実際にはマトリックス操作です。画像操作には、主に画像の基本的な算術演算、画像の重み付け操作(画像融合とも呼ばれる)、およびビット単位の操作が含まれます。これらの操作は、numpyマトリックスを介して直接実行することも、opencvの専用メソッドを介して実行することもできますが、opencvのマトリックス操作は飽和操作であり、その結果は純粋なマトリックス操作よりも優れています。

この記事があなたに役立つと思うなら、私が好きで、お気に入りを追加するのを手伝ってください、ありがとう!

OpenCV-Pythonの詳細については、「OpenCV-Pythonグラフィックス画像処理」
列のURLを参照してください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/108879397