图像连接是指将两个具有相同高度或宽度的图像连接在一起。OpenCV4中分别提供了水平连接和垂直连接的函数。
#cv.vconcat()函数原型
dst = cv.vconcat(src
[, dst])
其中各返回值和参数的含义分别为:
dst:连接后的图像(或矩阵)
src:需要连接的图像(或矩阵)
#cv.hconcat()函数原型
dst = cv.hconcat(src
[, dst])
其中各返回值和参数的含义分别为:
dst:连接后的图像(或矩阵)
src:需要连接的图像(或矩阵)
示例代码
# -*- coding:utf-8 -*-
import cv2 as cv
import numpy as np
import sys
if __name__ == '__main__':
# 图像的垂直和水平连接
# 读取四张图像
# 读取图像并判断是否读取成功
img00 = cv.imread('../images/lena00.jpg')
img01 = cv.imread('../images/lena01.jpg')
img10 = cv.imread('../images/lena10.jpg')
img11 = cv.imread('../images/lena11.jpg')
if img00 is None or img01 is None or img10 is None or img11 is None:
print('Failed to read images.')
sys.exit()
# 图像连接
# 水平连接
img0 = cv.hconcat((img00, img01))
img1 = cv.hconcat((img10, img11))
# 垂直连接
img = cv.vconcat((img0, img1))
# 显示结果
cv.imshow('img00', img00)
cv.imshow('img01', img01)
cv.imshow('img10', img10)
cv.imshow('img11', img11)
cv.imshow('img0', img0)
cv.imshow('img1', img1)
cv.imshow('img', img)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果如下图所示。
图像尺寸变换实际是指改变图像的长和宽,实现图像的缩放。OpenCV4中提供了修改图像尺寸的函数cv.resize()。
#cv.resize()函数原型
dst = cv.resize(src,
dsize
[, dst
[, fx
[, fy
[, interpolation]]]])
其中各返回值和参数的含义分别为:
dst:输出图像
src:输入图像
dsize:输出图像的尺寸
fx:水平轴的比例因子
fy:垂直轴的比例因子
interpolation:插值方法的标志,可选择的参数在下表中给出
标志 | 简记 | 作用 |
---|---|---|
cv.INTER_NEAREST | 0 | 最近邻插值法 |
cv.INTER_LINEAR | 1 | 双线性插值法 |
cv.INTER_CUBIC | 2 | 双三次插值法 |
cv.INTER_AREA | 3 | 使用像素区域关系重新采样,首选用于图像缩小 |
cv.INTER_LANCZOS4 | 4 | Lanczos插值法 |
cv.INTER_LINEAR_EXACT | 5 | 位精确双线性插值法 |
cv.INTER_MAX | 7 | 用掩模进行插值 |
示例代码
# -*- coding:utf-8 -*-
import cv2 as cv
import sys
if __name__ == '__main__':
# 读取图像并判断是否读取成功
img = cv.imread('./images/lena.jpg', cv.IMREAD_GRAYSCALE)
if img is None:
print('Failed to read lena.jpg.')
sys.exit()
# 将图像缩小
small_img = cv.resize(img, (15, 15), fx=0, fy=0, interpolation=cv.INTER_AREA)
# 最近邻插值
big_img1 = cv.resize(small_img, (30, 30), fx=0, fy=0, interpolation=cv.INTER_NEAREST)
# 双线性插值
big_img2 = cv.resize(small_img, (30, 30), fx=0, fy=0, interpolation=cv.INTER_LINEAR)
# 双三次插值
big_img3 = cv.resize(small_img, (30, 30), fx=0, fy=0, interpolation=cv.INTER_CUBIC)
# 展示结果
cv.namedWindow('small', cv.WINDOW_NORMAL)
cv.imshow('small', small_img)
cv.namedWindow('big_img1', cv.WINDOW_NORMAL)
cv.imshow('big_img1', big_img1)
cv.namedWindow('big_img2', cv.WINDOW_NORMAL)
cv.imshow('big_img2', big_img2)
cv.namedWindow('big_img3', cv.WINDOW_NORMAL)
cv.imshow('big_img3', big_img3)
cv.waitKey(0)
cv.destroyAllWindows()
图像翻转是指图像绕x轴或y轴翻转,OpenCV4中提供了图像翻转的函数cv.flip()。
#cv.flip()函数原型
dst = cv.flip(src,
flipCode
[, dst])
其中各返回值和参数的含义分别为:
dst:输出图像,与输入图像具有相同的尺寸,数据类型及通道数
src:输入图像
flipCode:翻转方式的标志。具体标志
flipCode | 翻转方式 |
---|---|
flipCode>0 | 绕y轴翻转 |
flipCode==0 | 绕x轴翻转 |
flipCode<0 | 同时绕x轴和y轴翻转 |
如下表所示。 |
示例代码
# -*- coding:utf-8 -*-
import cv2 as cv
import sys
if __name__ == '__main__':
# 读取图像并判断是否读取成功
img = cv.imread('./images/BRZ.jpg')
if img is None:
print('Failed to read lena.jpg.')
sys.exit()
# 沿x轴对称
img_x = cv.flip(img, 0)
# 沿y轴对称
img_y = cv.flip(img, 1)
# 先x轴对称,再y轴对称
img_xy = cv.flip(img, -1)
# 展示结果
cv.imshow('img', img)
cv.imshow('img_x', img_x)
cv.imshow('img_y', img_y)
cv.imshow('img_xy', img_xy)
cv.waitKey(0)
cv.destroyAllWindows()