opencv 图像处理②

目录

图像裁剪与通道截取

边界填充

 数值计算

 图像融合


图像裁剪与通道截取

# 截取部分图像数据
img=cv2.imread('cat.jpg')
cat=img[0:50,0:200] 
cv.show('cat',cat)
 
# 颜色通道提取
b,g,r=cv2.split(img)
 
# 合并颜色通道
 
img=cv2.merge((b,g,r)) 

只保留R,G,B的一个通道,其实就是将其他两个通道置为0

#只保留R
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,0]=0
cv_show('R',cur_img)

#只保留G
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,0]=0
cv_show('G',cur_img)

#只保留B
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,0]=0
cv_show('B',cur_img)

边界填充

 只需记住方法以及是怎么玩的就可以了 

# 设定边界(上下左右)

top_size,bottom_size,left_size,right_size = (50,50,50,50)
# BORDER_REPLICATE:复制法,也就是复制最边缘像素。
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
# BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制,例如:fedcba|abcdefgh|hgfedcb
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
# BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
# BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
# BORDER_CONSTANT:常量法,常数值填充。0就是做了一个黑边
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('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
 
plt.show()

 数值计算


#读取两张图像
img_cat=cv2.imread('cat.jpg')
img_dog=cv2.imread('dog.jpg')   

# 每个像素点+10
img_cat2= img_cat +10
 
# 维度一致才可相加,相当于% 256,取余
(img_cat + img_cat2)[:5,:,0]
 
#与前一个加法不同, 大于255取255

cv2.add(img_cat,img_cat2)[:5,:,0]

 图像融合

 img_cat+img_dog

此命令会报错,因为shape值是不同的

 可以这样操作 

#查看猫的shape值

img_cat.shape

#更改狗的shape值与猫相同

img_dog=cv2.resize(img_dog,(500,414))

 两张图融合可用此公式R=aX1+bX2+C,a、b,为权重系数,C为偏知项

 #猫占0.4,狗占0.6

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

#执行结果

plt.imshow(res)

# 当不知道具体shape值时,可以使用比例,x与y的比例

res=cv2.resize(img,(0,0),fx=4,fy=4)

 部分代码来源于 https://blog.csdn.net/qq_34387412/article/details/111873451

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高山仰止_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值