OpenCV学习笔记(四)——图像的连接与变换(cv.vconcat()、cv.hconcat()、cv.resize()、cv.flip())


OpenCV4中的函数可以实现图像形状的变换,包括图像尺寸变换、图像翻转和图像旋转等。

1 图像连接

图像连接是指将两个具有相同高度或宽度的图像连接在一起。OpenCV4中分别提供了水平连接和垂直连接的函数。

1.1 水平连接cv.vconcat()

#cv.vconcat()函数原型
dst = cv.vconcat(src
				 [, dst])

其中各返回值和参数的含义分别为:
dst:连接后的图像(或矩阵)
src:需要连接的图像(或矩阵)

1.2 垂直连接cv.hconcat()

#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()

运行结果如下图所示。
在这里插入图片描述

2 图像尺寸变换

图像尺寸变换实际是指改变图像的长和宽,实现图像的缩放。OpenCV4中提供了修改图像尺寸的函数cv.resize()。

2.1 修改尺寸cv.resize()

#cv.resize()函数原型
dst = cv.resize(src,
				dsize
			    [, dst
			    [, fx
			    [, fy
			    [, interpolation]]]])

其中各返回值和参数的含义分别为:
dst:输出图像
src:输入图像
dsize:输出图像的尺寸
fx:水平轴的比例因子
fy:垂直轴的比例因子
interpolation:插值方法的标志,可选择的参数在下表中给出

标志简记作用
cv.INTER_NEAREST0最近邻插值法
cv.INTER_LINEAR1双线性插值法
cv.INTER_CUBIC2双三次插值法
cv.INTER_AREA3使用像素区域关系重新采样,首选用于图像缩小
cv.INTER_LANCZOS44Lanczos插值法
cv.INTER_LINEAR_EXACT5位精确双线性插值法
cv.INTER_MAX7用掩模进行插值

示例代码

# -*- 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()

运行结果如下图所示。
在这里插入图片描述

3 图像翻转变换

图像翻转是指图像绕x轴或y轴翻转,OpenCV4中提供了图像翻转的函数cv.flip()。

3.1 图像翻转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()

运行结果如下图所示。
在这里插入图片描述
下一篇将会介绍OpenCV中在如何图像上添加几何图形和文字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值