OpenCV クイック スタート 9: OpenCV の算術演算とビット演算

1: 算術演算

1.追加

cv2.add(img1, img2)

img1: 追加する画像 1
img2: 追加する画像 2

2 つの画像を加算し、255 より大きい場合は 255 カウントを使用します。
合成する 2 つの画像のサイズは同じである必要があります

引き算、掛け算、割り算は似ているので、詳しい説明は省略します

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')

#图的加法运算就是矩阵的加法运算
#因此,加法运算的两张图大小必须是相等的

#print(dog.shape)

img = np.ones((1200, 1920, 3), np.uint8) * 50#像素值变成50

cv2.imshow('orig', dog)

result = cv2.add(dog, img)#加法  感觉曝光一样
cv2.imshow('result', result)

orig_1 = cv2.subtract(result, img)#减法变暗 result-img
#乘multiply(A,B)
#除divide(A,B)
cv2.imshow('org_1', orig_1)

cv2.waitKey(0)

加算効果のデモジア
減算効果のデモ引き算

2: 画像の融合

1. 融合機能

AddWeighted(InputArray src1、double alpha、InputArray src2、double beta、double gamma、OutputArray dst、int dtype=-1);

src1: 重み付けする必要がある最初の配列を示し、多くの場合マットに入力されます。
アルファ: 最初の配列の重みを示します。
src2: 2 番目の配列を示します。最初の配列と同じサイズとチャネル数を持つ必要があります。
ベータ: 重み値の最初の 2 つの配列を示します
。 ガンマ: 重みの合計に追加するスカラー値。その意味は、次にリストされている式を通じて自然に理解されます。
dst: OutputArray タイプ dst、2 つの入力配列と同じサイズとチャネル数を持つ出力配列
dtype: 出力配列のオプションの深さ (デフォルト値は -1) 。2 つの入力配列の深さが同じ場合、このパラメータは -1 (デフォルト値) に設定されます。これは srcl. Depth() と同等です。

アルファ、ベータが 1、ガンマが 0 の場合は加算と同じ効果となり、
2 つの画像の属性が同じ場合にのみ融合できます。

出力画像は次のように理解できます。

dst = src1 [I] * アルファ + src2 [I] * ベータ + ガンマ;

2. 例

import cv2
import numpy as np

back = cv2.imread('./back.jpeg')
smallcat = cv2.imread('./smallcat1.jpeg')

#只有两张图的属性是一样的才可以进行融合
print(back.shape)
print(smallcat.shape)

result = cv2.addWeighted(smallcat, 0.7, back, 0.3, 0)
cv2.imshow('add2', result)
cv2.waitKey(0)

3: ビット演算

1. AND演算

bitwise_and(src1, src2, dst=なし, マスク=なし)

src1: AND 演算に参加するイメージ
src2: src2 と src1 の AND 演算
dst: 入力と同じサイズおよび型の出力配列 マスク
: オプションの演算マスク、8 ビットの単一チャネル配列。変更する出力配列を指定します。エレメント

交通機関の動作は1&1=1、その他は0となり、小型照明を制御する並列回路と理解できます。

それとも違う理由か同じ理由なので、あまり説明しません

2. 例

import cv2
import numpy as np

#创建一张图片
img = np.zeros((200,200), np.uint8)
img2 = np.zeros((200,200), np.uint8)

img[20:120, 20:120] = 255
img2[80:180, 80:180] = 255

#new_img = cv2.bitwise_not(img)  #非  黑白颜色反转
#new_img = cv2.bitwise_and(img, img2)  #与--图像交集  全1则1  类似于串联控制灯亮  只有白色相交的地方是白色
#new_img = cv2.bitwise_or(img, img2)   #或--非0都显示
new_img = cv2.bitwise_xor(img, img2)   #异或 --交集0 


cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.waitKey(0)

非:色反転(1つの配列のみ操作可能)
ゆう

AND: 交差点に類似と

または: 結合に似ていますまた

XOR: 交差 0、その他は変更なし
する

4: 透かしを追加する

1. ここでは前に学習した numpy 操作を使用します

OpenCV クイック スタート 6: グラフィカル Numpy

2、。

#1. 引入一幅图片,dog
#2. 要有一个LOGO,需要自己创建
#3. 计算图片在什么地方添加,在添加的地方变成黑色
#4. 利用add,将logo 与 图处叠加到一起

import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

#创建LOGO和掩码
logo = np.zeros((200, 200, 3), np.uint8)
mask = np.zeros((200, 200), np.uint8)

#绘制LOGO
logo[20:120, 20:120] = [0,0,255]
logo[80:180, 80:180] = [0,255,0]

mask[20:120, 20:120] = 255
mask[80:180, 80:180] = 255

#对mask按位求反
m = cv2.bitwise_not(mask)

#选择dog添加logo的位置
roi = dog[0:200, 0:200]

#与m进行与操作
tmp = cv2.bitwise_and(roi, roi, mask = m)

dst = cv2.add(tmp, logo)

dog[0:200,0:200] = dst

cv2.imshow('dog', dog)
# cv2.imshow('dst', dst)
# cv2.imshow('tmp', tmp)
# cv2.imshow('m', m)
# cv2.imshow('mask', mask)
# cv2.imshow('logo', logo)
cv2.waitKey(0)

出力:
ごう

毎日の「ビッグケーキ」:
どこまで行っても10代に青春は残らないけど

おすすめ

転載: blog.csdn.net/weixin_52051554/article/details/126368642