OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

这篇具有很好参考价值的文章主要介绍了OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

1. 概述

为了方便开发人员的操作,OpenCV还提供了一些图像变换的API,本篇文章讲简单介绍各种API的使用,并附上一些样例。

2. 接口介绍

resize()

图像缩放函数,用于把图像按指定的尺寸放大或缩小。
dst = cv2.resize(src, dsize, fx, fy, interpolation)
dst = 生成的目的图像
src:需要变换的原图像
disize:(x, y)需要变换图像的尺寸,直接填
fx,fy:缩放因子,与disize会冲突,通常只需要二选一即可
interpolation:插值算法,用于缩放的算法。默认为双线性插值。

缩放算法参数
OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换
效果越好的算法运算越复杂,效果越好。反之相反。

import cv2
import numpy as np

lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 修改图像大小:fx,fy可以省略,默认为双线性插值
lina2 = cv2.resize(lina, (700, 700))
# 使用缩放因子,需要指定参数,并且dsize传空
lina3 = cv2.resize(lina, None, fx=2, fy=2, interpolation=cv2.INTER_AREA)

cv2.imshow('lina', lina)
cv2.imshow('lina3', lina3)

cv2.waitKey(0)

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

flip()

图像翻转函数,讲图像上下翻转,左右翻转
img1 = cv2.flip(img,flipCode)
img:需要翻转的图片
flipCode:值为0,上下翻转;值>0,左右翻转;值<0,上下左右一起翻转。

import cv2
import numpy as np

lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 上下翻转
lina_0 = cv2.flip(lina, 0)
# 左右翻转
lina_1 = cv2.flip(lina, 1)
# 上下左右翻转
lina_01 = cv2.flip(lina, -1)

cv2.imshow('lina', lina)
cv2.imshow('lina_0', lina_0)
cv2.imshow('lina_1', lina_1)
cv2.imshow('lina_01', lina_01)

cv2.waitKey(0)

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

rotate()

将图片按顺时针逆时针旋转一定角度
img2 = cv2.rotate(img, rotateCode)
img:需要旋转的图片
rotateCode:含义分别为:顺时针转90,180度,逆时针转90度。

rotateCode
OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

import cv2
import numpy as np

lina = cv2.imread('./image/lina.jpg')
print(lina.shape)

# 顺时针转90
lina_90 = cv2.rotate(lina, cv2.ROTATE_90_CLOCKWISE)

# 顺时针转180
lina_180 = cv2.rotate(lina, cv2.ROTATE_180)

# 顺时针转270,逆时针转90
lina_270 = cv2.rotate(lina, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow('lina', lina)
cv2.imshow('lina_90', lina_90)
cv2.imshow('lina_180', lina_180)
cv2.imshow('lina_270', lina_270)

cv2.waitKey(0)

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

仿射变换

仿射变换是图像旋转、缩放、平移的总成。

warpAffine()

img2 = cv2.warp(src, M, dsize, flags, mode, value)
src:需要变换的图像
M:进行变换的矩阵,变换成什么样子由M决定,可以由特定接口来求。
dsize:输出图像的尺寸
flags:与resize函数的缩放算法一致,默认为双线性插值。
mode:边界处标志
value:填充边界的值
后三个参数一般都用默认,主要使用前3个参数

getRotationMatrix2D()-变换矩阵1

求变换矩阵M的函数,主要用于旋转
M = cv2.getRotationMatrix2D(center, angle, scale)
center:中心点,按住哪个点进行旋转
angle:旋转的角度(逆时针旋转)
scale:缩放比例,1.0不缩放

import cv2
import numpy as np

lina = cv2.imread('./image/lina.jpg')
print(lina.shape)

# 变换前要求出变换矩阵

M = cv2.getRotationMatrix2D((200, 200), 30, 1.0)
lina2 = cv2.warpAffine(lina, M, (474, 474))



cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)


cv2.waitKey(0)

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

getAffineTransform()-变换矩阵2

求变换矩阵M,主要是用于平移+旋转,利用三个坐标点前后变化来确定一个平面的变化
M = cv2.getAffineTransform(src[], dst[])
src:源坐标点,以列表的形式传入(数据格式一定为float32
dst:变换后图的坐标,以列表的形式传入(数据格式一定为float32

import cv2
import numpy as np

lina = cv2.imread('./image/lina.jpg')
print(lina.shape)


# 变换前要求出变换矩阵
# 坐标一定要是32位的小数!!否则会报错
src = np.float32([[0, 0], [0, 100], [100, 0]])
dst = np.float32([[50, 50], [50, 150], [200,50]])
M = cv2.getAffineTransform(src, dst)
lina2 = cv2.warpAffine(lina, M, (474, 474))


cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)


cv2.waitKey(0)

透视变换

完全改变物体的位置和形状,需要四个坐标点。一般用来调整图片的位置。

warpPerspective()

用于透视变换的主函数
img2 = cv2.warpPerspective(img, M, dsize, …)
img:需要进行变换的图像
M:进行透视变换的矩阵
dsize:输出图片的大小

getPerspectiveTransform()

用来求透视变换的矩阵,需要四个点
M = cv2.getPerspectiveTransform(src[], dst[])
src:源坐标点,以列表的形式传入(数据格式一定为float32
dst:变换后图的坐标,以列表的形式传入(数据格式一定为float32

import cv2
import numpy as np

work = cv2.imread('./image/work.jpg')
# 将图片调整到适合大小
work = cv2.resize(work, (700, 700), interpolation=cv2.INTER_AREA)
# 设置适当变换坐标,求出变换矩阵
src = np.float32([[210, 20], [700, 110], [0, 660], [600, 700]])
dst = np.float32([[0, 0], [700, 0], [0, 700], [700, 700]])
M = cv2.getPerspectiveTransform(src, dst)
# 进行透视变换
work2 = cv2.warpPerspective(work, M, (700, 700))
cv2.imshow('work', work)
cv2.imshow('work2', work2)


cv2.waitKey(0)

变换后如图所示,将主要图片变正了
OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

以上就是图像变换的简单介绍,如果有疑问,欢迎在评论区讨论哦。文章来源地址https://www.toymoban.com/news/detail-476056.html

到了这里,关于OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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日
    浏览(92)
  • Python-OpenCV中的图像处理-霍夫变换

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

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

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

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

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

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

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

    2024年02月12日
    浏览(42)
  • Python图像处理【10】基于离散余弦变换的图像压缩

    由于图像中相邻像素间的相关性引起的空间冗余、图像序列中不同帧之间存在相关性引起的时间冗余,因此我们需要对图像数据进行压缩。数据压缩的目的就是通过去除这些数据冗余来减少数据表示所占用的存储空间。随着大数据时代的到来,图像数据在质量提高的同时,其

    2024年02月04日
    浏览(64)
  • Python|OpenCV-基本使用和图像处理(1)

    前言 本文是该专栏的第1篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 OpenCV是基于开源许可的跨平台计算机 视觉库 ,起初OpenCV是由Intel公司开发的,直到后面由非营利组织进行维护。提到OpenCV,就不得不说它提供了大量的图像和视频处理函数,使得计算机视觉

    2024年02月12日
    浏览(60)
  • opencv 图像和视频处理的基本操作(python)

    原图:   1 图片的获取 主要通过cv2.imread(src)函数进行获取 2 图片的显示 3 ROI区域(图片截取) 4 图片的RGB通道划分 注意cv2.imread()获取的图片通过顺序为BGR,而非RGB,即B为0,G为1,R为2  保留R通道  保留G通道   保留B通道   5 RGB通道合成   6 边界填充 主要是通过cv2.copyMakeBo

    2023年04月21日
    浏览(67)
  • 【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

    透视变换(Perspective Transformation)是一种图像处理中常用的变换手段,它用于将图像从一个视角映射到另一个视角,常被称为投影映射。透视变换可以用于矫正图像中的透视畸变,使得图像中的物体在新的视平面上呈现更加规则的形状。 透视变换通常涉及到寻找图像中的特定

    2024年02月03日
    浏览(63)
  • OpenCV图像处理之傅里叶变换

    傅里叶变换: 目的就是得到图像的低频和高频,然后针对低频和高频进行不同的处理。处理完之后,在通过逆变换恢复到图像,这时候对低频和高频的处理就会反映到图像上。 频率 高频:变化剧烈的灰度分量,例如边界。 低频:变化缓慢的灰度分量,例如一天蓝天(相似的

    2024年02月06日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包