展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

边界填充

  • 简介
边界填充就是对图像进行一些变换,让原始图像进行扩大。
边界填充的入口参数:
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。
  • 代码案例
import cv2 #opencv的缩写为cv2
import matplotlib.pyplot as plt # matplotlib库用于绘图展示
import numpy as np # numpy数值计算工具包
# 魔法指令,直接展示图,Jupyter notebook特有
%matplotlib inline
img = cv2.imread('01_Picture/01_cat.jpg')
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)
# 方式二:反射法
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT)
# 方式三:反射法二(不要最边缘的像素)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT_101)
# 方式四:外包装法
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
# 方式五:常量法
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0)
import matplotlib.pyplot as plt
plt.subplot(231), plt.imshow(img,'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate,'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect,'gray'), plt.title('REPLECT')
plt.subplot(234), plt.imshow(wrap,'gray'),plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236), plt.imshow(constant,'gray'),plt.title('CONSTAVI')
plt.show()
  • 执行结果

  • 阈值越界处理

img_cat = cv2.imread('01_Picture/01_cat.jpg')
img_dog = cv2.imread('01_Picture/03_dog.jpg')
img_cat2 = img_cat + 10 # 将 img_cat 矩阵中每一个值都加 10
print(img_cat[:5,:,0])
print(img_cat2[:5,:,0])
print((img_cat+img_cat2)[:5,:,0]) # 0-255 若相加越界后 294 用 294%256 获得余数 38
  • 执行结果
[[142 146 151 ..., 156 155 154]
[107 112 117 ..., 155 154 153]
[108 112 118 ..., 154 153 152]
[139 143 148 ..., 156 155 154]
[153 158 163 ..., 160 159 158]]
[[152 156 161 ..., 166 165 164]
[117 122 127 ..., 165 164 163]
[118 122 128 ..., 164 163 162]
[149 153 158 ..., 166 165 164]
[163 168 173 ..., 170 169 168]]
[[ 38 46 56 ..., 66 64 62]
[224 234 244 ..., 64 62 60]
[226 234 246 ..., 62 60 58]
[ 32 40 50 ..., 66 64 62]
[ 60 70 80 ..., 74 72 70]]
  • 处理方式2
cv2.add(img_cat,img_cat2)[:5,0] # cv2.add 是越界后取最大值 255
  • 执行结果
array([[255, 255, 255],
[224, 246, 255],
[226, 248, 255],
[255, 255, 255],
[255, 255, 255]], dtype=uint8)
posted @   DogLeftover  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示