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)