python opencv图像处理(五)(python和java哪个更值得学)

网友投稿 560 2022-08-27


python opencv图像处理(五)(python和java哪个更值得学)

图像几何变换

图像缩放

图像缩放只是调整图像的大小,为此, OpenCV 为我们提供了一个函数 cv.resize() ,原函数如下:

resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)

src 表示的是输入图像,而 dsize 代表的是输出图像的大小,如果为 0 ,则:

dsize=Size(round(fxsrc.cols),round(fysrc.rows))

dsize 和 fx 、 fy 不能同时为 0 。

fx 、fy 是沿 x 轴和 y 轴的缩放系数,默认取 0 时,算法如下:

fx=(double)dsize.width/src.cols fy=(double)dsize.height/src.rows

最后一个参数 interpolation 表示插值方式:

INTER_NEAREST – 最近邻插值 INTER_LINEAR – 线性插值(默认) INTER_AREA – 区域插值 INTER_CUBIC – 三次样条插值 INTER_LANCZOS4 – Lanczos插值

示例:

import cv2 as cv #读取图片src = cv.imread('data.jpg')print(src.shape) #图像缩放result = cv.resize(src, (300, 150))print(result.shape) #显示图像cv.imshow("src", src)cv.imshow("result", result) #等待显示cv.waitKey()cv.destroyAllWindows()

同理,我们可以通过设定一个比例进行缩放,可以是等比例缩放,也可以是不等比例缩放,下面是等比例缩放的示例:

import cv2 as cv# 设定比例scale = 0.5#读取图片src = cv.imread('data.jpg')rows, cols = src.shape[:2]#图像缩放result = cv.resize(src, ((int(cols * scale), int(rows * scale))))print(result.shape)#显示图像cv.imshow("src", src)cv.imshow("result", result)#等待显示cv.waitKey()cv.destroyAllWindows()

除了可通过设定 dszie 对图像进行缩放,我们还可以通过设定 fx 和 fy 对图像进行缩放:

import cv2 as cv#读取图片src = cv.imread('data.jpg')print(src.shape)#图像缩放result = cv.resize(src, None, fx=0.5, fy=0.5)print(result.shape)#显示图像cv.imshow("src", src)cv.imshow("result", result)#等待显示cv.waitKey()cv.destroyAllWindows()

图像平移

图像平移是通过仿射函数 warpAffine() 来实现的,原函数如下:

warpAffine(src, M, dsize, dst=None, flags=None,borderMode=None, borderValue=None)

在图像平移中我们会用到前三个参数:

需要变换的原始图像移动矩阵M变换的图像大小(如果这个大小不和原始图像大小相同,那么函数会自动通过插值来调整像素间的关系)。

import cv2 as cvimport numpy as np#读取图片src = cv.imread('data.jpg')rows, cols = src.shape[:2]# 定义移动距离tx = 50ty = 100# 生成 M 矩阵affine = np.float32([[1, 0, tx], [0, 1, ty]])dst = cv.warpAffine(src, affine, (cols, rows))# 显示图像cv.imshow('src', src)cv.imshow("dst", dst)# 等待显示cv.waitKey(0)cv.destroyAllWindows()

图像旋转

图像旋转主要调用 getRotationMatrix2D() 函数和 warpAffine() 函数实现,绕图像的某一个中心点旋转,具体如下:

M = cv2.getRotationMatrix2D((cols/2, rows/2), 30, 1)

参数分别为:旋转中心、旋转度数、scale

rotated = cv2.warpAffine(src, M, (cols, rows))

参数分别为:原始图像、旋转参数、原始图像宽高

图像旋转:设( x0 , y0 )是旋转后的坐标,( x , y )是旋转前的坐标,( m , n )是旋转中心, a 是旋转的角度(顺时针),( left , top )是旋转后图像的左上角坐标,则公式如下:

import cv2 as cv#读取图片src = cv.imread('data.jpg')# 原图的高、宽rows, cols = src.shape[:2]# 绕图像的中心旋转# 参数:旋转中心 旋转度数 scaleM = cv.getRotationMatrix2D((cols/2, rows/2), 90, 1)#dst = cv.warpAffine(src, M, (cols, rows))# 显示图像cv.imshow("src", src)cv.imshow("dst", dst)# 等待显示cv.waitKey()cv.destroyAllWindows()

图像翻转

图像翻转在 OpenCV 中调用函数 flip() 实现,原函数如下:

flip(src, flipCode, dst=None)

src:原始图像。flipCode:翻转方向,如果 flipCode 为 0 ,则以 X 轴为对称轴翻转,如果 fliipCode >0 则以 Y 轴为对称轴翻转,如果 flipCode < 0 则在 X 轴、 Y 轴方向同时翻转。

实例如下:

import cv2 as cvimport matplotlib.pyplot as plt# 读取图片 由 GBR 转 RGBimg = cv.imread('data.jpg')src = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 图像翻转img1 = cv.flip(src, 0)img2 = cv.flip(src, 1)img3 = cv.flip(src, -1)# plt 显示图形titles = ['Source', 'Ima1', 'Ima2', 'Ima3']images = [src, img1, img2, img3]for i in range(4): plt.subplot(2, 2, i + 1) plt.imshow(images[i]) plt.title(titles[i]) plt.xticks([]) plt.yticks([])plt.show()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python opencv 图像处理进阶篇(一)(python下载安装教程)
下一篇:python opencv 图像处理(六)(python和java哪个更值得学)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~