OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)

这篇具有很好参考价值的文章主要介绍了OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 学习目标

  1. 学习 OpenCV 图像的翻转函数 cv.flip;
  2. 学习 NumPy 矩阵的反转函数 np.flip;
  3. 自己实现矩阵反转的函数。

2. OpenCV 翻转

翻转也称镜像,是指将图像沿轴线进行轴对称变换。水平镜像是将图像沿垂直中轴线进行左右翻转,垂直镜像是将图像沿水平中轴线进行上下翻转,水平垂直镜像是水平镜像和垂直镜像的叠加。

2.1 cv.flip() 函数说明
cv.flip(src, flipCode[, dst]) -> dst
2.2 参数说明
参数 说明
src 表示输入图像。
flipCode 表示翻转轴线的控制参数,整型(int)。
dst 表示变换操作的输出图像,可选项。
2.3 flipCode 值说明
说明
0 表示水平翻转。
1 表示垂直翻转。
-1 表示对角线翻转。

3. 翻转实例

3.1 实例代码
import cv2 as cv
import numpy as np

# 图像翻转
def image_flip():
  img = cv.imread("./images/lena.jpg")
  cv.imshow("original", img)
  # 水平翻转
  horizontally_img = cv.flip(img,0)
  cv.imshow("horizontally_img", horizontally_img)
  # 垂直翻转
  vertically_img = cv.flip(img,1)
  cv.imshow("vertically_img", vertically_img)
  # 对角线翻转
  horizontally_vertically_img = cv.flip(img,-1)
  cv.imshow("horizontally_vertically_img", horizontally_vertically_img)
  cv.waitKey(0)
  cv.destroyAllWindows()
if __name__ == "__main__":
  image_flip()
3.2 翻转效果

OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)

4. 矩阵反转

4.1 np.flip() 函数说明
numpy.flip(array, axis) → dst_array
4.2 参数说明
参数 说明
array 表示输入的数组。
axis 表示[integer]轴,阵列沿此轴反转。
4.3 axis 值说明
说明
0 表示上下反转。
1 表示左右反转。

5. 反转实例

5.1 实例代码
import cv2 as cv
import numpy as np

# 阵列反转
def image_np_flip():
  img = cv.imread("./images/lena_small.jpg")
  cv.imshow("original", img)
  # 水平翻转
  horizontally_img = np.flip(img,0)
  cv.imshow("horizontally_img", horizontally_img)
  # 垂直翻转
  vertically_img = np.flip(img,1)
  cv.imshow("vertically_img", vertically_img)
  # 对角线翻转
  horizontally_vertically_img0 = np.flip(img,0)
  horizontally_vertically_img = np.flip(horizontally_vertically_img0,1)
  cv.imshow("horizontally_vertically_img", horizontally_vertically_img)
  cv.waitKey(0)
  cv.destroyAllWindows()
if __name__ == "__main__":
  image_np_flip()
5.2 反转效果

OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)

6. 实现阵列反转

6.1 实现阵列上下反转
  1. 获取阵列的宽高值;
  2. 复制一份改阵列,防止反转的时候影响了原阵列;
  3. 上下翻转只需要循环阵列的行,将第一行和最后一行互换,将第二行和倒数第二行互换!!!
  4. 注意:由于 range 是从 0 开始,所以最后一行需要先减 1!!!
  5. 注意:解构赋值直接将两个值进行互换,但是换的第一个值需要复制一份互换np.copy(src[i])!!!
# 上下翻转
def flip_ud(src):
  h,w,c = src.shape
  src = np.copy(src)
  for i in range(h//2):
    # cur = np.copy(src[i])
    # src[i] = src[h-i-1]
    # src[h-i-1] = cur
    src[i],src[h-i-1] = src[h-i-1],np.copy(src[i])
  return src
6.2 实现阵列左右反转
  1. 对比上下反转,左右反转需要循环列一层的互换!!!
# 左右翻转
def flip_lr(src):
  h,w,c = src.shape
  src = np.copy(src)
  for i in range(h):
    for j in range(w//2):
      src[i][j],src[i][w-j-1] = src[i][w-j-1],np.copy(src[i][j])
  return src
6.3 实现阵列左上角和右下角反转
# 图像左上角和右下角翻转
def flip_lu_rd(src):
  h,w,c = src.shape
  src = np.copy(src)
  # 左上角和右下角翻转
  for i in range(h//2):
    for j in range(w//2):
      src[i][j],src[h-i-1][w-j-1] = src[h-i-1][w-j-1],np.copy(src[i][j])
  return src
6.4 使用 6.3 的方法实现对角线反转
  1. 图像左上角和右下角翻转;
  2. 右上角和左下角翻转;
    2.1 左右翻转;
    2.2 图像左上角和右下角翻转;
    2.3 左右翻转图像还原。
def flip_ud_lr(src):
  # 图像左上角和右下角翻转
  src = flip_lu_rd(src)
  # 右上角和左下角翻转
  # 1. 左右翻转
  src = flip_lr(src)
  # 2. 图像左上角和右下角翻转
  src = flip_lu_rd(src)
  # 3. 左右翻转图像还原
  src = flip_lr(src)
  return src
6.5 直接使用 6.1 和 6.2 实现对角线反转
def flip_ud_lr(src):
  # 上下翻转
  src = flip_ud(src)
  # 左右翻转
  src = flip_lr(src)
  return src

7. 实现图像翻转实例

7.1 翻转实例代码
# 上下翻转
def flip_ud(src):
  h,w,c = src.shape
  src = np.copy(src)
  for i in range(h//2):
    # cur = np.copy(src[i])
    # src[i] = src[h-i-1]
    # src[h-i-1] = cur
    src[i],src[h-i-1] = src[h-i-1],np.copy(src[i])
  return src

# 左右翻转
def flip_lr(src):
  h,w,c = src.shape
  src = np.copy(src)
  for i in range(h):
    for j in range(w//2):
      src[i][j],src[i][w-j-1] = src[i][w-j-1],np.copy(src[i][j])
  return src

# 图像左上角和右下角翻转
def flip_lu_rd(src):
  h,w,c = src.shape
  src = np.copy(src)
  # 左上角和右下角翻转
  for i in range(h//2):
    for j in range(w//2):
      src[i][j],src[h-i-1][w-j-1] = src[h-i-1][w-j-1],np.copy(src[i][j])
  return src

def flip_ud_lr(src):
  # 图像左上角和右下角翻转
  src = flip_lu_rd(src)
  # 右上角和左下角翻转
  # 1. 左右翻转
  src = flip_lr(src)
  # 2. 图像左上角和右下角翻转
  src = flip_lu_rd(src)
  # 3. 左右翻转图像还原
  src = flip_lr(src)
  return src

def image_self_flip():
  img = cv.imread("./images/lena_small.jpg")
  # cv.imshow("original", img)
  # 水平翻转
  horizontally_img = flip_ud(img)
  cv.imshow("horizontally_img", horizontally_img)
  # 垂直翻转
  vertically_img = flip_lr(img)
  cv.imshow("vertically_img", vertically_img)
  # 对角线翻转
  horizontally_vertically_img = flip_ud_lr(img)
  cv.imshow("horizontally_vertically_img", horizontally_vertically_img)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  image_self_flip()
实现效果

OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)文章来源地址https://www.toymoban.com/news/detail-459975.html

8. 总结

  1. 注意: 阵列的反转OpenCV 的翻转 对比,少了对角线翻转,但是使用【上下反转+左右反转】能够实现相同的效果;
  2. 自己使用循环阵列的方法实现水平、垂直、对角线翻转,但是相比原生方法,计算很慢,需要进行优化!!!

到了这里,关于OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

    几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine :使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。 cv2.warpPerspective :使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等操作。 cv2.getAffineTransform :计算仿射变换

    2024年02月05日
    浏览(34)
  • OpenCV-Python中的图像处理-霍夫变换

    霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使用。 Hough直线变换,可以检测一张图像中的直线 cv2.HoughLines(image, rho, theta, threshold) return:返回值

    2024年02月12日
    浏览(31)
  • OpenCV-Python中的图像处理-傅里叶变换

    傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变换 (DFT) 分析图像的频域特性。实现 DFT 的一个快速算法被称为快速傅里叶变换( FFT)。 对于一个正弦信号:x (t) = A sin (2πft), 它的频率为 f,如果把这个信号转到它的频域表示,我们会在频率

    2024年02月12日
    浏览(29)
  • Python-OpenCV中的图像处理-几何变换

    对图像进行各种几个变换,例如移动,旋转,仿射变换等。 cv2.resize() cv2.INTER_AREA v2.INTER_CUBIC v2.INTER_LINEAR res = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) 或 height, width = img.shape[:2] res = cv2.resize(img, (2 width, 2 height), interpolation=cv2.INTER_CUBIC) OpenCV提供了使用函数cv2.warpAffine()实

    2024年02月13日
    浏览(49)
  • 【OpenCV • c++】图像几何变换 | 图像仿射变换

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月16日
    浏览(25)
  • 【C++ OpenCV】图像变换:连接、尺寸、翻转、旋转、仿射变换

    目录 图像缩放变换 图像翻转 图像拼接 纵向拼接 横向拼接 图像插值原理 作用 单线性插值 双线性插值的公式 双线性插值的例子 双线性插值的直观展示 意义 仿射变换 图像旋转 实操 一、实现图像旋转 二、根据定义的三个点实现仿射变换,并且求取仿射变换矩阵 源码 src -

    2024年01月18日
    浏览(31)
  • (opencv)图像几何变换——平移

    图像的平移操作是将图像的所有像素坐标进行水平或垂直方向移动,也就是将所有像素点按照给定的偏移量在水平方向沿x轴、垂直方向上沿y轴移动。平移变换分为两种类型:图像大小变化与图像大小不变。第一种类型保证图像平移的完整信息,第二种图像导致原始图像的部

    2024年02月08日
    浏览(30)
  • (opencv)图像几何变换——缩放

    图像缩放是指将图像的尺寸变小或变大的过程,也就是减少或增加源图像数据的像素个数。图像缩放一定程度上会造成信息的丢失,因此需要考虑适宜的方法进行操作。 下面介绍两种常用的图像缩放方法的原理及实现 1.基于等间隔提取图像缩放 等间隔提取图像缩放是通过对

    2024年02月16日
    浏览(27)
  • 【OpenCV • c++】图像几何变换 | 图像平移

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月16日
    浏览(23)
  • 【OpenCV • c++】图像几何变换 | 图像旋转

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪   图像的几何变换是指在不改变图像像素值的前提下对图像像素进

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包