1: 算術演算
1.追加
cv2.add(img1, img2)
img1: 追加する画像 1
img2: 追加する画像 22 つの画像を加算し、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代に青春は残らないけど