OpenCV干货2:图像运算
1.加法运算
加号运算符
a + b = m o d ( a + b , 256 ) a+b=mod(a+b,256) a+b=mod(a+b,256)
cv2.add()
a+b
不满255
时取直接加结果,大于等于255
时取饱和值255
-
cv2.add(num1,num2)
正常按规则加。
-
cv2.add(image1,image2)
image1和image2的图像大小、类型必须一致。
-
cv2.add(num,image)或者cv2.add(image,num)
将超过image饱和值的数值处理为饱和值。
2.图像加权和
cv2.addWeighted()
以satuurate表示取饱和值,则加权和计算公式如下:
d
s
t
=
s
a
t
u
r
a
t
e
(
s
r
c
1
×
a
l
p
h
a
+
s
r
c
2
×
b
e
t
a
+
γ
)
dst=saturate(src1×alpha+src2×beta+γ)
dst=saturate(src1×alpha+src2×beta+γ)
表示为代码形式为:
dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)
- src1、src2为两个大小、类型相同的图像;
- alpha、beta表示图像权重;
- gamma可以理解为亮度调节量,可以为0,但不能省略。
3.位运算
cv2.bitwise_and()——按位与
代码语法格式如下:
dst=cv2.bitwise_and(src1,src2[,mask]])
- dst表示与输入值具有同样大小的array输出值;
- src1表示第一个array或scalar类型的输入值;
- src2表示第二个array或scalar类型的输入值;
- mask表示可选操作掩码,8位单通道array;
按位与具有如下特点:
- 任何数值N与数值0进行按位与操作,都会得到数值0;
- 任何数值N(这里仅考虑8位值)与数值255(8位二进制数是1111 1111)进行按位与操作,都会得到数值N本身。
cv2.bitwise_or()——按位或
代码语法格式与参数解析参考按位与。
cv2.bitwise_xor()——按位异或
代码语法格式与参数解析参考按位与。
cv2.bitwise_not()——按位非
代码语法格式如下:
dst=cv2.bitwise_not(src[,mask]])
- dst 表示与输入值具有同样大小的array输出值。
- src表示array类型的输入值。
- mask表示可选操作掩码,8位单通道array值。
4.掩模
当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的值置为0。
例如加法和位运算都可以使用掩模参数:
dst=cv2.add(num1,num2,mask=mask)
dst=cv2.bitwise_and(src1,src2[,mask]])
5.位平面分解
在8位灰度图中,每一个像素使用8位二进制值来表示,其值的范围在[0,255]之间。可以将其中的值表示为:
v
a
l
u
e
=
a
7
×
27
+
a
6
×
26
+
a
5
×
25
+
a
4
×
24
+
a
3
×
23
+
a
2
×
22
+
a
1
×
21
+
a
0
×
20
value=a7×2 7+a6×2 6+a5×2 5+a4×2 4+a3×2 3+a2×2 2+a1×2 1+a0×2 0
value=a7×27+a6×26+a5×25+a4×24+a3×23+a2×22+a1×21+a0×20
公式中各个ai的权重是不一样的,a7的权重最高,a0的权重最低。这代表a7的值对图像的影响最大,而a0的值对图像的影响最小。
通过提取灰度图像像素点二进制像素值的每一比特位的组合,可以得到多个位平面图像。图像中全部像素值的ai值所构成的位平面,称为第i个位平面(第i层)。在8位灰度图中,可以组成8个二进制值图像,即可以将原图分解为8个位平面。
处理步骤:
- 图像预处理读取原始图像O,获取原始图像O的宽度M和高度N;
- 建立一个值均为2 n的Mat作为提取矩阵,使用按位与操作将一个数值指定位上的数字提取出来;
- 将灰度图像与提取矩阵进行按位与运算,得到各个位平面;
- 将得到的二值位平面进行阈值处理,将其中大于零的值处理为255;
- 将位平面显示出来,直观地观察各个位平面的具体情况。
示例程序(仿照参考书中例子):
6.图像加密与解密(应用
通过对原始图像与密钥图像进行按位异或,可以实现加密;将加密后的图像与密钥图像再次进行按位异或,可以实现解密。
7.数字水印(应用
将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图像的最低有效位层替换为当前需要隐藏的二值图像,从而实现将二值图像隐藏的目的。由于二值图像处于载体图像的最低有效位上,所以对于载体图像的影响非常不明显,其具有较高的隐蔽性。
欢迎朋友们找我讨论学习中的问题
希望朋友们能点赞收藏加关注支持我的后续总结~