画像はバイナリ算術の進値であってもよい計算はビット演算であってもよいです
画像加算器
1 インポートCV2 2 インポートnumpyのNPとして 3 IMG1はnp.random.randint(0256、サイズ= [3,3]、DTYPE = = np.uint8) 4 IMG2がnp.random.randint(0256、サイズ= [3,3 = ]、DTYPE = np.uint8) 5 IMG3 = cv2.add(IMG1、IMG2) 6 プリント(" IMG1 = \ n " 、IMG1) 7 プリント(" IMG2 = \ n " 、IMG2) 8 プリント(「IMG1 + IMG2 = \ n "、IMG1 + IMG2) 9 印刷(" cv2.add(IMG1、IMG2)= \ N "、IMG3)
IMG1 = [ 106 40 179 ] [ 171 138 207 ] [ 131 34 55 ] IMG2 = [ 125 73 224 ] [ 132 229 201 ] [ 151 37 40 ] IMG1 + IMG2 = [ 231 113 147 ] [ 47 111 152 ] [ 26 71 95 ] cv2.add(IMG1、IMG2) = [ 231 113 255 ] [ 255 255 255 ] [ 255 71 95]
上記のコードを示して加算演算子とcv2.add()関数を追加することにより
加算演算子
図2つの画素値が加算に対応し、255未満、即ち、モジュロ256、及び
cv2.add()関数
255を超える、255他の結果が得られると、元の値と比較され、すなわち、と、2枚の画像の画素値の飽和値(最大値)となります。
演算子2つの関数は2枚の画像を計算する際に関与し得る、画像の値であってもよいです
第二、画像重み付け、及び
すなわち、重み付け画像と各画像式は、アカウントに重い重量です。
DST =飽和(SRC1 * A + SRC2 * B)
結果は、飽和値でした
1つの インポートCV2 2犬= cv2.imread(" /home/miao/dog.jpg " ) 3猫= cv2.imread(" /home/miao/cat.jpg " ) 4結果= cv2.addWeighted(犬、0.6、猫、0.4 、0) 5 cv2.imshow(" 犬" 、イヌ) 6 cv2.imshow(" 猫" 、猫) 7 cv2.imshow(" 結果" 、結果) 8 cv2.waitKey() 9 cv2.destroyAllWindows()
第三には、論理演算をビット単位
一般的なビット演算機能
関数名 | の基本的な意味 |
cv2.bitwise_and() | ビットAND |
cv2.bitwise_or() | ビットごとのOR |
cv2.bitwise_xor() | ビットごとのXOR |
cv2.bitwise_nor | ビット演算 |
これらの関数は、第3のパラメータのマスクで添加することができるマスク演算結果を得ることができる部分を指定
二値画像に変換される計算値は、更なる計算についてです
ビット単位のANDは、任意の数値演算をプレスに設置されている0 0
2つだけの値0と255のこの特徴的な構成マスク画像に応じ
画像とマスク画像は、指定された画像部分におけるビット単位のマスク画像とすることができます
1 インポートCV2 2 インポートnumpyのは、NPとして 3 np.random.randint(0、255、(5,5)、DTYPE = = np.uint8) 4 B = np.zeros((5,5)、DTYPE = NPを。 UINT8) 5 B [0:3,0:3] = 255 6 B [4,4] = 255 7 C = cv2.bitwise_and(a、b)は 8 プリント(" = \ n " ) 9 プリント(" B = \ n " 、B) 10 プリント(" C = \ n "、C)
= [ 215 164 27 216 90 ] [ 184 33 40 101 247 ] [ 77 150 189 26 251 ] [ 101 30 32 49 86 ] 、[ 64 86 175 28 221 ] B = [ 255 255 255 0 0] [ 255 255 255 0 0] [ 255 255 255 0 0] [0 0 0 0 0] [0 0 0 0 255 ] 、C = [ 215 164 27 0 0] [ 184 33 40 0 0] [ 77 150 189 0 0] [ 0 0 0 0 0] [0 0 0 0 221]
第四に、ビットプレーン分解
8ビットグレースケール画像、8ビットの2進表現を用いて、各画素値は、で表すことができます。
値= A7 * 2 ^ 7 + A6 * 2 ^ 6 + A5 * 2 ^ 5 + A4 * 2 ^ 4 + A3 * 2 ^ 3 + A2 * 2 ^ 2 + A1 * 2 ^ 1 + A0 * 2 ^ 0
重量は、画像サイズに異なる効果のそれぞれの重量をaiは異なっています
したがって、元の8ビットのバイナリイメージ、すなわち、8ビットプレーンを分解することができます
画像に最も類似した、最大の絵とA7重み最も高い相関
0最小重量、画像相関の最小構成は、典型的には乱雑に見えます
ビットプレーンの二値画像を抽出し、表示画像がほぼ黒色画像は、直接起動して低いため、グランドプレーンの画素値を、黒表示付近の画像、その結果、ビット0のビットプレーンより抽出プロセス値より大きい後255は、二値画像をモノクロ画像として表示されるであろう
1つの インポートCV2 2 インポートNPとしてnumpyの 3犬= cv2.imread(" /home/miao/dog.jpg " 、0) 4 cv2.imshow(" 犬" 、犬) 5 R、C = dog.shape 6 X = np.zeros((R、C、8)、DTYPE = np.uint8) 7 用の I における範囲(8 ): 8 X [:、:、I] = 2 ** iが 9 Y = np.zeros((R 、C、8)、DTYPE =np.uint8) 10 のための I における範囲(8 ): 11 Y [:、:、i]は= cv2.bitwise_and(犬、X [:、:、i])と 12 マスク= Y [:、:、i]は> 0 13 Y [マスク] = 255 14 cv2.imshow(STR(I)、Y [:、:、i])と 15 cv2.waitKey() 16 cv2.destroyAllWindows()
オリジナルグレースケール画像
A0:
A1
A2
A3
A4
A5
A6
A7
第五に、画像の暗号化と復号化
ビット単位のXORによる暗号化と復号化を達成することができます
排他的論理和演算は、ルールが想定されます。
XOR(A、B)= C
得ます
XOR(C、B)= A
XOR(C)= B
それは次のような関係を描くことができます
:平文、生データ
B:キー
C:暗号文
1 import cv2 2 import numpy as np 3 dog = cv2.imread("/home/miao/dog.jpg" , 0) 4 r,c = dog.shape 5 key = np.random.randint(0 , 256 , size = [r,c] , dtype = np.uint8) 6 encryption = cv2.bitwise_xor( dog , key) 7 decryption = cv2.bitwise_xor( encryption , key) 8 cv2.imshow("dog" , dog) 9 cv2.imshow("key" , key) 10 cv2.imshow("encryption" , encryption) 11 cv2.imshow("decryption" , decryption) 12 cv2.waitKey() 13 cv2.destroyAllWindows()
原图dog
密匙图像key
加密图像encryption
解密图像decryption
六、数字水印
即将一个需要隐藏的二值图像信息嵌入载体图像
将需要隐藏的二值图像嵌入在载体图像的最低有效位(即相关性最低,对图像影响最小)
嵌入过程
建立与图像大小相同,元素值为254的提取矩阵即:1111 1110
将图像与其按位与运算则可以将最低有效位清0,保留图像的高7位
也可以对像素右移一位,再进行左移一位
将水印图像(二值图像)的像素值255转化为1(二进制二值图像),
然后将二进制二值水印图像与最低有效位被置零后得到的原始载体图像进行按位或运算
就可以将水印信息嵌入原始载体图像内
提取过程
建立与图像大小相同,元素值为1,即:0000 0001
将图像内每个像素,将其与数值为1进行按位与操作,即可将图像的最低有效位提取出来