OpenCV入门 图像的边缘填充与融合

总结:

 

图像的基本概念:

OpenCV 中图像读入的数据格式是ndarray 数据格式。

 

通道顺序的改变

ndarray的通道顺序为 B G R

更换通道顺序为 R G B

img=img[:,:,(2,1,0)]

0——B   1——G  2——R

 

图像属性 

即mat对象的属性

Img.shape:

输出(宽度,长度,通道数)

img.shape[0]:输出宽度

Img.shape[1]:输出长度

Img.shape[2]:输出通道数

Image.size:输出像素

Image.dtype:输出数据类型

输入

print("长度:", img.shape[1], "宽度:", img.shape[0], "通道:", img.shape[2], "像素:", img.size, "数据类型:", img.dtype)

输出

长度: 462 宽度: 489 通道: 3 像素: 677754 数据类型: uint8

 

图片的边缘填充

cv2.copyMakeBorder(原图像, 【目标图像】, 上方向扩充长度, 下方向扩充长度, 左方向扩充长度, 右方向扩充长度, borderType=填充操作的类型, 【常数填充时的颜色值】)

 

borderType: 填充的类型。OpenCV 填充的类型有:

BORDER_DEFAULT:将最近的像素进行复制填充;

BORDER_REPLICATE:复制最近的一行或一列像素并一直延伸至添加边缘的宽度或高度;

BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制。我们使用字母为例,左右复制abcdefgh靠近边缘的 6 个字母: fedcba | abcdefgh | hgfedc;

BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称复制。同样的,使用字母为例:gfedcba | abcdefg | gfedcba;

BORDER_WRAP:外包装法。相当于截断复制: cdefgh | abcdefgh | abcdefg;

BORDER_CONSTANT:常量法,常数值填充。

 

示例:

replicate = cv2.copyMakeBorder(img, 30, 30, 30, 30, borderType=cv2.BORDER_REPLICATE)

 

图像的融合

 

cv2.addWeighted(原图片1, 原图片1的权重, 原图片2, 原图片2的权重, 加和后的偏置量, 【输出图片】, 【输出图片的可选深度】)

被叠加的两幅图像必须是尺寸相同、类型相同的。

 

图片的重置大小

cv2.resize(需要重置的图片,【目标图片】, 【图片尺寸(M,N), x轴的缩放系数】, y轴的缩放系数】, 【插入方式】)

 

图片融合的示例

将图 2 苹果和梨的图像进行融合,权值分别为0.5, 0.5,输出图片大小为550×366

OpenCV入门 图像的边缘填充与融合_第1张图片

 

图2 苹果(左)和 梨(右)

 

具体步骤如下:

读取两个图像,并输出它们的尺寸:

​​​​​​​img_apple = cv2.imread('apple.png')

img_pear = cv2.imread('pear.png')

print('img_apple size', img_apple.shape)

print('img_pear size', img_pear.shape)

我们得到输出:

       可以看到,两张图片的的尺寸大小不同。这时,使用cv2.resize:

我们仅使用它的重置大小功能:

 

img_apple_resize = cv2.resize(img_apple, (550, 366))

img_pear_resize = cv2.resize(img_pear, (550, 366))

使用cv2.addWeighted函数实现图像融合:

res = cv2.addWeighted(img_apple_resize, 0.5, img_pear_resize, 0.5, 0)

融合后的图像如图 3 所示。

OpenCV入门 图像的边缘填充与融合_第2张图片

 

图3 融合后的图像

 

 

你可能感兴趣的:(计算机视觉,opencv,计算机视觉,python,cv,图像识别)