计算机视觉-OpenCV项目学习实践 学习笔记-03
因为学习过程使用的是jupyter notebook,偶尔会讲一下使用notebook时碰到的问题。notebook打开后闪退(命令提示符界面弹不出来),可能是修改的保存位置出现错误,我是修改到了d盘然后文件夹被我移走了。
ps:因为学习过程使用的是jupyter notebook,偶尔会讲一下使用notebook时碰到的问题。notebook打开后闪退(命令提示符界面弹不出来),可能是修改的保存位置出现错误,我是修改到了d盘然后文件夹被我移走了。
边界填充
对原有图片向四周进行扩展。
设定四个边界范围,便于后续的拓展。
top_size,bottom_size,left_size,right_size = (50,50,50,50) #设定四个边界,表示填充的范围
边界填充函数,包含对象名,四个边界变量,填充方法
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType = cv2.BORDER_REPLICATE)
填充方法:
- 复制法,也就是复制最边缘的像素 BORDER_REPLICATE
- 反射法,将对应像素边界反向复制 gfedcb | bcdefg | gfedcb BORDER_REFLECT
- 对称反射法,以最边缘的像素点为轴进行对称反射 dcb | abcd | cba BORDER_REFLECT_101
- 外包装法,将最边缘所有像素进行复制 abcdef | abcdef | abcdef BORDER_WRAP
- 常数法,常熟填充 ,常数要加上参数value确定常数值 BORDER_CONSTANT
部分填充方法展示:
复制法

对称反射法

常数法

数值计算
数值计算
因为图片是以矩阵方式存储,每个像素点就是矩阵中的一项,图片的数值运算就是对图片中每一个像素点进行数值运算
img_11 = img_1 + 10
对图片直接进行数值运算,注意因为是数值运算所以在发生数值越界时,结果会自动取余
在矩阵输出上可以做出调整
img_1[:5,:,0]
其中[:5]表示前五行,即0—4行,输出其他范围同理 [:]输出全部列 [0]表示BGR的颜色通道
因为openCV的图片提取是BGR,所以0 = Blue、1 = Green、 2 = Red
ps:因为是数值计算所以发生越界,会自动取余。因为调整后图片略显惊悚,结果就不贴上来了。
图片相加
cv2.add(img_1,img_11)
使用openCV中的加法算法对两个图片直接相加,如果发生越界,会直接保留最大值255
OpenCV的加法算法对图片进行相加如果发生越界会直接保留最大值,因为灰度图像通常用8位表示亮度,所以最大值为255(也就是加超了会直接变白色,或者说越加越白)
图像融合
可以对一个图像进行变形处理,或者将两个图像相融
图片变形
因为两个大小不同的图片是不能相加的。
例:img_1.shape = [1024,1024,3]
img_2.shape = [500,500,3]
大小不同的图片不能相加,需要调整
1、修改画幅大小,通过改变长宽进行拉伸
img_2 = cv2.resize(img_2,(1024,1024))
直接输入想要的长宽调整图片
2、不改变像素,通过对x、y轴进行拉伸变换调整大小
img_2 = cv2.resize(img_2,(0,0),fx = 4,fy = 1)
不改变像素大小,改变宽度,x轴变为原来四倍,长度不变,y轴不变
图片相容
即使图片大小相同也不能直接相加。直接相加是数值相加会发生越界。
res = img_1 + img_2
直接相加的结果

假设、
有
。其中 α、β分别为两个图片的权重,然后再加上一个偏置值b。
res = cv2.addWeighted(img_1, 0.4, img_2, 0.6, 0)
img_1 的权重为0.4、img_2 的权重为0.6,偏置值为0
图片相融结果

可以看出来,有点像将两个图片虚化后叠加,通过改变两个图片的权重,可以修改它们的透明度从而实现相融的效果。
注:文章中所有内容均来自b站视频教程《计算机视觉实战项目》,以及我个人在学习过程中碰到的一些问题和解决办法。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)