opencv从入门到精通 哦吼06

 

目录

阈值处理小结

图像的运算

掩模

图像的加法运算

图像的位运算

按位与运算

按位或运算

按位取反运算

按位异或运算

加权和

覆盖


阈值处理小结

OpenCV 提供了一个可以快速抠出图像主体线条的工具,这个工具就是阈值。在阈值的作用下,一幅彩色图像被转换为只有纯黑和纯白的二值图像。然而,灰度图像经 6(自适应阈值处理包括在其中) 种阈值处理类型处理后,都无法得到图像主体的线条。为此,OpenCV 提供了一种改进的阈值处理技术,即自适应处理,其关键在于对图像中的不同区域使用不同的阈值。有了这种改进的阈值处理技术,得到图像主体的线条就不再是一件难以实现的事情了。

图像的运算

图像是由像素组成的,像素又是由具体的正整数表示的,因此图像也可以进行一系列数学运算,通过运算可以获得截取、合并图像等效果。OpenCV 提供了很多图像运算方法,经过运算的图像可以呈现出很多有趣的视觉效果。下面将对 OpenCV 中一些常用的图像运算方法进行介绍。

掩模

可以类比于做手术时的那块手术布,有一块手术区域,而掩模就是图像处理的手术区域

掩模,也叫作掩码,英文为 mask,在程序中用二值图像来表示:0 值(纯黑)区域表示被遮盖的部分,255 值(纯白)区域表示暴露的部分(某些场景下也会用 0 和 1 当作掩模的值)。

255值得那部分 就是被操作得那部分

创建 3 通道掩模图像

利用 numpy 库的 zeros()方法创建一幅掩模图像,感兴趣区域为在该图像中横坐标为 20、纵坐标为 50、宽为 60、高为 50 的矩形,展示该掩模图像。调换该掩模图像的感兴趣区域和不感兴趣区域之后,再次展示掩模图像,具体代码如下:

import cv2
import numpy as np

mask=np.zeros((150,150,3),np.uint8)
mask[50:100,20:80]=255
cv2.imshow('mask1',mask)
mask[:,:]=255
mask[50:100,20:80]=0
cv2.imshow('mask2',mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像的加法运算

图像中每一个像素都有用整数表示的像素值,2 幅图像相加就是让相同位置像素值相加,最后将计算结果按照原位置重新组成一幅新图像。原理如图 9.9 所示。

在开发程序时通常不会使用「+」运算符对图像做加法运算,而是用 OpenCV 提供的 add()方法,该方法的语法如下:

dst = cv2.add(src1, src2, mask, dtype)

图像的位运算

位运算是二进制数特有的运算操作。图像由像素组成,每个像素可以用十进制整数表示,十进制整数又可以转化为二进制数,所以图像也可以做位运算,并且位运算是图像数字化技术中一项重要的运算操作。

按位与运算

与运算就是按照二进制位进行判断,如果同一位的数字都是 1,则运算结果的相同位数字取 1,否则取 0。

OpenCV 提供 bitwise_and()方法来对图像做与运算,该方法的语法如下:

 dst = cv2.bitwise_and(src1, src2, mask)

图像做与运算时,会把每一个像素值都转为二进制数,然后让两幅图像相同位置的两个像素值做与运算,最后把运算结果保存在新图像的相同位置上

与运算有两个特点

1.如果和纯白就行与运算就是像素的原值

2.如果和纯黑进行运算就是纯黑值

按位或运算

或运算也是按照二进制位进行判断,如果同一位的数字都是 0,则运算结果的相同位数字取 0,否则取 1。

OpenCV 提供 bitwise_or()方法来对图像做或运算,该方法的语法如下:

dst = cv2.bitwise_or(src1, src2, mask)

或运算有以下两个特点

1.与纯白值运算就是纯白值

2.与纯黑值进行运算 变为原值

按位取反运算

取反运算是一种单目运算,仅需一个数字参与运算就可以得出结果。取反运算也是按照二进制位进行判断,如果运算数某位上数字是 0,则运算结果的相同位的数字就取 1,如果这一位的数字是 1,则运算结果的相同位的数字就取 0。

按位异或运算

异或运算也是按照二进制位进行判断,如果两个运算数同一位上的数字相同,则运算结果的相同位数字取 0,否则取 1。

OpenCV 提供 bitwise_xor()方法对图像做异或运算,该方法的语法如下:

 dst = cv2.bitwise_xor(src, mask)

加权和

多次曝光技术是指在一幅胶片上拍摄几个影像,最后冲印出的相片同时具有多个影像的信息。

OpenCV 通过计算加权和的方式,按照不同的权重取两幅图像的像素之和,最后组成新图像。加权和不会像纯加法运算那样让图像丢失信息,而是在尽量保留原有图像信息的基础上把两幅图像融合到一起。

OpenCV 通过 addWeighted()方法计算图像的加权和,该方法语法如下:

 dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)

import cv2
import numpy as np
dog=cv2.imread('dog/gou .jpg')
car=cv2.imread('dog/img.png')
rows,cols,channel=dog.shape
car=cv2.resize(car,(cols,rows))
img=cv2.addWeighted(dog,0.6,car,0.6,0)
cv2.imshow('dog',dog)
cv2.imshow('car',car)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

覆盖

覆盖图像就是直接把前景图像显示在背景图像中,前景图像挡住背景图像。覆盖之后背景图像会丢失信息,不会出现加权和那样的「多次曝光」效果。

OpenCV 没有提供覆盖操作的方法,开发者可以直接用修改图像像素值的方式实现图像的覆盖、拼接效果:从 A 图像中取像素值,直接赋值给 B 图像的像素,这样就能在 B 图像中看到 A 图像的信息了。

小结
读者朋友要明确关于掩模的 3 个问题:0 和 255 这 2 个值在掩模中各自发挥的作用;通过这 2 个值,掩模的作用又是什么;如何创建一个掩模。掌握了掩模后,就能够利用掩模遮盖图像相加后的结果。掩模除了应用于图像的加法运算外,还应用于图像的位运算。一个掩模应用于图像的位运算的典型实例就是对图像进行加密、解密。本章除了上述内容,还讲解了合并图像的 2 种方式:加权和、覆盖。读者朋友要熟练掌握这两种方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值