目录
函数 flip函数
语法
dst=cv2.flip(src,flipcode),flipcode 有3种状态
- 大于0 是以Y轴为对称轴进行翻转
- 小于0 是以X轴Y轴方向同时翻转
- 等于0 是以X轴为对称轴进行翻转
源码
- import cv2
-
- img_a = cv2.imread(r"F:\tp\lena_r.png")
-
- # 原图
- cv2.imshow("img_a", img_a)
- # 水平翻转
- img_b = cv2.flip(img_a, 1)
- cv2.imshow("img_b", img_b)
-
- # 组合翻转
- img_c = cv2.flip(img_a, -1)
- cv2.imshow("img_c", img_c)
-
- # 垂直翻转
- img_d = cv2.flip(img_a, 0)
- cv2.imshow("img_d", img_d)
-
- cv2.waitKey()
- cv2.destroyAllWindows()
图像输出翻转效果图
一、代码解读
1. 原图显示
- img_a = cv2.imread(r"F:\tp\lena_r.png") # 读取BGR图像
- cv2.imshow("img_a", img_a) # 显示原始图像
-
读取图像文件
lena_r.png
,默认以BGR格式加载。 -
使用
cv2.imshow()
显示原始图像,窗口名称为img_a
。
2. 水平翻转(镜像翻转)
- img_b = cv2.flip(img_a, 1) # 参数1表示水平翻转(沿y轴)
- cv2.imshow("img_b", img_b) # 显示水平翻转结果
-
cv2.flip(img, 1)
:水平翻转图像,翻转轴为垂直中轴线(类似镜面反射)。 -
效果:图像左右对称交换。
3. 组合翻转(水平+垂直翻转)
- img_c = cv2.flip(img_a, -1) # 参数-1表示同时水平和垂直翻转
- cv2.imshow("img_c", img_c) # 显示组合翻转结果
-
cv2.flip(img, -1)
:先水平翻转,再垂直翻转(等价于绕图像中心旋转180度)。 -
效果:图像左右和上下均对称交换。
4. 垂直翻转
- img_d = cv2.flip(img_a, 0) # 参数0表示垂直翻转(沿x轴)
- cv2.imshow("img_d", img_d) # 显示垂直翻转结果
-
cv2.flip(img, 0)
:垂直翻转图像,翻转轴为水平中轴线。 -
效果:图像上下对称交换。
二、重点图像翻转知识点精讲
1. cv2.flip()
函数详解
-
功能:对图像进行几何翻转。
-
语法:
dst = cv2.flip(src, flipCode)
-
src
:输入图像(BGR、灰度图等)。 -
flipCode
:翻转模式标志:-
1
:水平翻转(沿y轴)。 -
0
:垂直翻转(沿x轴)。 -
-1
:同时水平和垂直翻转。
-
-
-
返回值:翻转后的图像
dst
。
2. 翻转的数学原理
-
水平翻转:像素点坐标变换为
(x, y) → (width-1-x, y)
。 -
垂直翻转:像素点坐标变换为
(x, y) → (x, height-1-y)
。 -
组合翻转:像素点坐标变换为
(x, y) → (width-1-x, height-1-y)
。
3. 应用场景
-
数据增强:
-
在深度学习训练中,通过翻转扩充数据集,提升模型泛化能力。
-
示例:人脸检测时,水平翻转图像增加不同视角样本。
-
-
图像校正:
-
修正因摄像头安装方向导致的图像颠倒问题。
-
示例:监控摄像头画面垂直翻转以符合人眼习惯。
-
-
对称性分析:
-
检测图像中的对称结构(如建筑、生物形态)。
-
示例:医学图像中分析器官对称性。
-
4. 与其他操作的结合
-
翻转 + 旋转:
- img_flipped = cv2.flip(img, 1) # 水平翻转
- img_rotated = cv2.rotate(img_flipped, cv2.ROTATE_90_CLOCKWISE) # 顺时针旋转90度
-
翻转 + 缩放:
- img_resized = cv2.resize(img, (new_w, new_h))
- img_flipped = cv2.flip(img_resized, 0) # 垂直翻转
三、总结及注意事项
核心知识点总结
-
翻转模式:
-
1
:水平翻转(左右镜像)。 -
0
:垂直翻转(上下颠倒)。 -
-1
:组合翻转(等效旋转180度)。
-
-
坐标变换:
-
翻转操作本质是对像素坐标的映射,不涉及插值计算。
-
-
内存与性能:
-
翻转是原地操作(无复杂计算),性能高效。
-
注意事项
-
参数混淆问题:
-
避免错误使用参数(如将垂直翻转误写为
flipCode=1
)。 -
错误示例:
img = cv2.flip(img, 1) # 预期垂直翻转,实际得到水平翻转
-
-
多通道支持:
-
cv2.flip()
支持所有通道类型的图像(如BGR、灰度、RGBA)。 -
对于含Alpha通道的图像(如PNG),Alpha通道会一同翻转。
-
-
图像边界处理:
-
翻转操作不会引入黑边或裁剪,保持原始图像完整内容。
-
-
与旋转的区别:
-
翻转是镜像对称操作,旋转是绕中心点的角度变换。
-
示例:
-
cv2.flip(img, 1)
≠cv2.rotate(img, cv2.ROTATE_180)
。
-
-
-
实际应用建议:
-
数据增强:在训练时随机应用翻转,避免过拟合。
-
视频处理:实时翻转视频流需注意性能(如摄像头镜像模式)。
-
完整示例修正
- import cv2
-
- img = cv2.imread("image.jpg")
-
- # 水平翻转(镜像)
- img_horizontal = cv2.flip(img, 1)
- # 垂直翻转(上下颠倒)
- img_vertical = cv2.flip(img, 0)
- # 组合翻转(等效旋转180度)
- img_both = cv2.flip(img, -1)
-
- # 显示结果(添加窗口名称明确说明)
- cv2.imshow("Original", img)
- cv2.imshow("Horizontal Flip", img_horizontal)
- cv2.imshow("Vertical Flip", img_vertical)
- cv2.imshow("Both Flip", img_both)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
通过以上分析,可以更精准地掌握图像翻转的操作逻辑与应用场景,避免常见误区。
评论记录:
回复评论: