OpenCV--图像融合、截取、更改大小、像素点计算

OpenCV–图像融合、截取、更改大小、像素点计算

一、截取图像中的一部分

#截取部分图像数据
cat = img[0:50, 0:200]
cv_imgshow('cat', cat)

二、像素点计算

dst = cv.add( src1, src2[, dst[, mask[, dtype]]] )

该函数如果加起来大于255,则就取最大值255,否则取加起来的值

代码示例:

#像素值计算
img_cat = cv.imread("cat.jpg")
img_cat2 = img_cat + 10
print("img_cat:\n", img_cat[:5, :, 0])
print("img_cat2:\n", img_cat2[:5, :, 0])

img_cat:
[[142 146 151 … 156 155 154]
[108 112 118 … 155 154 153]
[108 110 118 … 156 155 154]
[139 141 148 … 156 155 154]
[153 156 163 … 160 159 158]]
img_cat2:
[[152 156 161 … 166 165 164]
[118 122 128 … 165 164 163]
[118 120 128 … 166 165 164]
[149 151 158 … 166 165 164]
[163 166 173 … 170 169 168]]

#相当于%256 取余数
(img_cat + img_cat2)[:5, :, 0]

array([[ 38, 46, 56, …, 66, 64, 62],
[226, 234, 246, …, 64, 62, 60],
[226, 230, 246, …, 66, 64, 62],
[ 32, 36, 50, …, 66, 64, 62],
[ 60, 66, 80, …, 74, 72, 70]], dtype=uint8)

#cv.add() : 该函数如果加起来大于255,则就取最大值255,否则取加起来的值
cv.add(img_cat, img_cat2)[:5, :, 0]

array([[255, 255, 255, …, 255, 255, 255],
[226, 234, 246, …, 255, 255, 255],
[226, 230, 246, …, 255, 255, 255],
[255, 255, 255, …, 255, 255, 255],
[255, 255, 255, …, 255, 255, 255]], dtype=uint8)

三、更改图片大小

函数:

img = cv.resize(src, dsize[, dst[, fx=0[, fy=0[, interpolation=INTER_LINEAR]]]])

  • src:需要更改的图像;
  • dsize:更改的尺寸大小,如果为0,则将图像改为dsize = Size(round(fx*src.cols),round(fy*src.rows));
  • fx:沿水平轴X的比例因子;
  • fy:沿水平轴Y的比例因子;
  • interpolation:插值的方法,默认INTER_LINEAR。

代码示例:

img_dog = cv.resize(img_dog, (500, 414))
img_dog.shape

(414, 500, 3)

可以不指定图片的长和宽,来指定图片的长和宽的大小比例来更改图片的size
res = cv.resize(img_cat, (0,0), fx=4, fy=4)
plt.imshow(res)

在这里插入图片描述

res = cv.resize(img_cat, (0,0), fx=2, fy=4)
plt.imshow(res)

在这里插入图片描述

res = cv.resize(img_cat, (0,0), fx=5, fy=5, interpolation=cv.INTER_LANCZOS4)
plt.imshow(res)

在这里插入图片描述

四、图片融合

语法:

dst = cv.addWeighted( src1, alpha, src2, beta, gamma[, dst[, dtype]]

Z = W1X + W2Y + b

  • src1::图片1矩阵;
  • src2:图片2矩阵;
  • alpha:图片1的权重;
  • beta:图片2的权重;
  • gamma:偏置项。

代码示例:

#图片融合
img_cat + img_dog  #两张图片的shape不同不能够相
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-1a5786cc51f0> in <module>
      1 #图片融合
      2 
----> 3 img_cat + img_dog  #两张图片的shape不同不能够相

ValueError: operands could not be broadcast together with shapes (414,500,3) (429,499,3) 

#改变图像的大小
img_dog = cv.resize(img_dog, (500, 414))

#图像融合addWeigheted()
# Z = W1*X + W2*Y + b   X, Y 为图片, W1, W2 为权重参数, b 为偏置数,将图像提亮多少
res = cv.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
plt.imshow(res)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值