栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

图像处理Opencv(三)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图像处理Opencv(三)

颜色通道的提取
cv2.split(img)

cv2中提供了split函数来帮助我们提取颜色通道,参数img为图像变量名,返回值有三个,分别为b通道,g通道,r通道。返回值会分别得到图像的bgr通道对应的图像数据。
例:

边沿填充

当我们对图像大小进行操作时,图像原来的规格可能与我们需求的规格有所差异,在调整时,对于规格差异部分我们就需要进行边界填充

cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

参数img为图像变量名,参数top_size, bottom_size, left_size, right_size分别为上,下,左,右四个边的长度大小,参数borderType为填充方式

具体的填充方式如下:
BORDER_REPLICATE:    复制法,也就是复制最边缘像素。

BORDER_REFLECT:    反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101:  反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:     外包装法 cdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:   常量法,常数值填充。

具体效果如下图:
(常数填充的常数为0)

数值计算

图像的存储的底层为Ndarray的结构,所以我们可以通过对其底层结构进行数值上的操作从而来操作图像

加法运算

当图像直接加上一个常数值的时候,由于图像的ndarray结构,所以图像中的每个像素点都加上该常数(numpy的广播机制,每个元素同时进行运算,或者说一个矩阵加上一个常数则矩阵中的每个元素都加上这个元素)


Ndarray类型数据索引的格式不懂的可以参考 numpy基础知识二

当图像直接相加时,必须要保证两个图像规格相同,或者说两个矩阵相加的条件是必须是同型矩阵,图像相加时,对应ndarray中的数据相加,即矩阵相加时对应位置元素相加
数据继承上例

这里我们可以看到得到结果并不是对应位置相加。因为颜色通道范围前面提到过是0~255,不存在大于255或者小于0的亮度,所以当我们图像数据ndarray中的元素溢出时我们保留溢出部分,即当数越界时,我们保留这个数模上256(0~255,共计256)的值。

cv2中也为我们提供了加法运算的函数

cv2.add(img_cat,img_cat2)

cv2中提供的加法函数的运算与numpy中ndarray的运算不同

当图像数据中的元素溢出时将不在取模,而是直接取最大亮度255。

图像融合
上述介绍完加法后,我们可以尝试通过运算ndarray中的数据来操作图像
现有两图片

我们尝试利用ndarray中加法运算将其融合
在相加前要调整规格(大小)保持一致

规格不同不能进行运算

调整规格,一致后可进行相加
效果如下

溢出部分按取模保留数据。

接下来我们尝试用cv2中函数来进行融合

cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)

addWeighted函数以权重的方式将图片进行相加,最后一个参数为偏置项。可理解为 : 结果=a图一+b图二+偏置项
继承上例,规格已经调好,效果如下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号