图像的运算,例如加法运算、位运算等基础图像运算。我们所使用的图像处理技术正是依靠这些简单的基础运算来完成的。

1.加法运算:

分两种方式,一种为传统“ ”号,另一种是函数cv2.add(),因为计算机一般使用8个比特来表示灰度图像,所以像素值的范围是0~255。当像素值的和超过255时,这两种加法方式的处理方法是不一样的。

1.1运算符“ ”

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(1)

上式中,a和b表示两幅图像的像素值,mod(a b,256) 表示“a b的和除以256取余”。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(2)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(3)

通过上面的解释知道,(a b)>255,写除以256取余,我们来验证img3的数据:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(4)

验证结果,符合上面表达式。

1.2 cv2.add()函数

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(5)

当像素a和像素b的和超过255时,会将其截断,取范围内的最大值,也就是255,这是与运算符“ ”的不同之处。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(6)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(7)

ps:由于使用cv2.add()函数,执行后当img1 img2中的数值大于255时,则取255,可以看一下在img3中标注的红框,都是img1 img2中大于255的数值。

2.减法运算

同样分两种,一种是传统的“-”,另一种是函数cv2.subtract()。

2.1 “-”号运算

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(8)

a和b表示两幅图像的像素值,mod(a-b,255) 1表示“a-b的差除以255取余后加1”。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(9)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(10)

ps:这里重点需要注意的就是负数相除取余数。我们先来看红框中标注的数字是如何得来的:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(11)

先看上图标注的计算式如果把img1-img2,当数值小于0,就会按照mod(a-b,255) 1的方程式进行运算。此时取出的余数就是img3中用红框标注的数值。我们看一下它余数是如何来的。(98-178)%5 1=176,(98-178)%5=176-1=175,此时我们如果把(98-178)变为178-98=80,我们再用175 80=255。其他a-b<0的数值计算也是如此。因此,我们可以得出个结论在python中负数取余后的结果和相同正数取余后的结果相加等于余数。或者说在这里我们可以用余数=负数 除数,例如176-1=(98-178) 255。

2.2 函数cv2.subtract()

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(12)

当像素a和像素b的差值小于0时,会将其截断,取最小值0,这是与运算符“-”的不同之处。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(13)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(14)

3.乘法运算

图像乘法运算有矩阵乘法和矩阵的点乘两种。面向Python的OpenCV提供了cv2.mutiply()函数进行矩阵的点乘运算,Python为矩阵的乘法运算提供了dot()函数。

1.1矩阵乘法:np.dot()函数

矩阵乘法的一般格式为:result=np.dot(a,b)其中:a和b表示需要进行矩阵乘法计算的两个像素值矩阵。在进行矩阵乘法运算时必须满足其行列维数的规则。

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(15)

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(16)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(17)

Ps:没看明白img3的数值是如何计算出来的,这个后续补充。

3.2 cv2.multiply()函数

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(18)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(19)

矩阵点乘运算的最终结果基本都是255,这是由于,在结果大于255时,类似于加法运算,计算机会截断数据,取最大值。

4.除法运算

除法运算应用在图像中即为矩阵的点除运算,面向Python的OpenCV提供了cv2.divide()函数来进行像素矩阵的点除运算。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(20)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(21)

矩阵点除运算的最终结果全是整数,这是因为像素的范围一般在0~255之间而且是整数,所以,当定义的随机矩阵是8位整型数时,在做除法运算时对结果将自动取整。

5.逻辑运算

在进行图像处理时经常会遇到按位逻辑运算。主要有按位与、按位或、按位非、按位异或四种常用的逻辑运算

5.1 按位与

当参与运算的值都为真,结果为真,否则为假

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(22)

OpenCV中的cv2.bitwise_and()函数用于进行按位与运算,其一般格式为:cv2.bitwise_and(src1,src2[,mask])其中:dst表示与输入值具有相同大小的输出值。src1表示第一个输入值。src2表示第二个输入值。mask表示可选操作掩码。

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(23)

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(24)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(25)

5.2 按位或

按位或的规则是参与运算的两个值只要有一个为真,结果就为真

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(26)

OpenCV中的cv2.bitwise_or()函数用于进行按位与运算,其一般格式为:cv2.bitwise_or(src1,src2[,mask])其中:dst表示与输入值具有相同大小的输出值。src1表示第一个输入值。src2表示第二个输入值。mask表示可选操作掩码。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(27)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(28)

5.3 按位非

按位非是取反操作

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(29)

语法:cv2.bitwise_not(src[,mask]);src表示输入值。 mask表示可选操作掩码。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(30)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(31)

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(32)

ps:这个有点类似photoshop中的反选,但又不是,这里把整个原图片的颜色全转换成了反色,也叫补色。比如白变成了黑,红变成了蓝。就是与原图颜色相反。(像素值取反)

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(33)

5.4 按异或

按位异或操作类似于半加运算

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(34)

语法:cv2.bitwise_xor(src1,src2[,mask]);src表示输入值。 mask表示可选操作掩码。

实例:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(35)

执行结果:

python使用opencv处理图像(3.基于python和opencv的图像处理-图形运算)(36)

Ps:选定区域取反色。

(以上内容为机器学习:基于OpenCV和Python的智能图像处理个人学习笔记,此书由高敬鹏、江志烨、赵娜编写,如有侵权,联系删除)

,