当前位置: 首页 > wzjs >正文

app开发制作平台网站建设汕头建设网招标

app开发制作平台网站建设,汕头建设网招标,上海科技网络公司,海口免费自助建站模板OpenCV 中的旋转相关函数详解 OpenCV 提供了多种函数用于图像的旋转操作,主要分为 任意角度旋转 和 固定角度旋转。以下是常用函数及详细使用说明: 一、任意角度旋转 1. cv2.getRotationMatrix2D() 生成旋转矩阵,用于定义旋转参数。 函数原…

OpenCV 中的旋转相关函数详解

OpenCV 提供了多种函数用于图像的旋转操作,主要分为 任意角度旋转固定角度旋转。以下是常用函数及详细使用说明:


一、任意角度旋转

1. cv2.getRotationMatrix2D()

生成旋转矩阵,用于定义旋转参数。
函数原型

cv2.getRotationMatrix2D(center, angle, scale) -> M
  • 参数说明
    • center:旋转中心坐标 (x, y),通常为图像中心 (width/2, height/2)
    • angle:旋转角度(顺时针方向,单位为度)。
    • scale:缩放因子(1.0 表示不缩放)。
  • 返回值:2x3 的仿射变换矩阵 M
2. cv2.warpAffine()

应用旋转矩阵对图像进行仿射变换。
函数原型

cv2.warpAffine(src, M, dsize[, dst, flags, borderMode, borderValue]) -> dst
  • 关键参数
    • M:旋转矩阵(来自 cv2.getRotationMatrix2D)。
    • dsize:输出图像尺寸 (width, height)。若未指定,默认与原图尺寸相同(可能裁剪内容)。
    • flags:插值方法(如 cv2.INTER_LINEAR)。
    • borderMode:边界填充模式(如 cv2.BORDER_CONSTANT)。
    • borderValue:填充颜色(默认为黑色)。
完整代码示例
import cv2
import numpy as np# 读取图像
img = cv2.imread('image.jpg')
h, w = img.shape[:2]# 计算旋转中心
center = (w // 2, h // 2)# 生成旋转矩阵(顺时针旋转45度,无缩放)
M = cv2.getRotationMatrix2D(center, angle=45, scale=1.0)# 计算旋转后的图像尺寸(避免裁剪)
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])
new_w = int((h * sin) + (w * cos))
new_h = int((h * cos) + (w * sin))
M[0, 2] += (new_w / 2) - center[0]  # 调整平移参数
M[1, 2] += (new_h / 2) - center[1]# 应用旋转
rotated = cv2.warpAffine(img, M, (new_w, new_h), flags=cv2.INTER_LINEAR, borderValue=(255, 255, 255))cv2.imshow('Rotated Image', rotated)
cv2.waitKey(0)

二、固定角度旋转

cv2.rotate()

快速实现 90°、180°、270° 的旋转(无需手动计算矩阵)。
函数原型

cv2.rotate(src, rotateCode[, dst]) -> dst
  • 参数说明
    • rotateCode:旋转模式:
      • cv2.ROTATE_90_CLOCKWISE:顺时针旋转90度。
      • cv2.ROTATE_180:旋转180度。
      • cv2.ROTATE_90_COUNTERCLOCKWISE:逆时针旋转90度(等效于顺时针270度)。
代码示例
# 顺时针旋转90度
rotated_90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

三、关键问题与优化

1. 旋转后的黑边处理

旋转可能导致图像边缘出现黑色填充。可通过以下方式优化:

  • 自定义填充颜色:设置 borderValue 参数(如白色填充)。
    rotated = cv2.warpAffine(img, M, (new_w, new_h), borderValue=(255, 255, 255))
    
  • 图像扩展模式:使用 borderMode=cv2.BORDER_REPLICATE 复制边缘像素。
2. 旋转后的图像尺寸控制
  • 自动计算新尺寸(避免裁剪):
    new_w = int(w * |cosθ| + h * |sinθ|)
    new_h = int(w * |sinθ| + h * |cosθ|)
    
  • 保持原图尺寸(可能裁剪内容):
    rotated = cv2.warpAffine(img, M, (w, h))
    
3. 插值方法选择
  • cv2.INTER_NEAREST:最近邻插值(速度快,锯齿明显)。
  • cv2.INTER_LINEAR:双线性插值(平衡速度与质量,默认)。
  • cv2.INTER_CUBIC:双三次插值(质量高,速度慢)。

四、复合变换(旋转+平移)

若需同时旋转和平移,可直接修改旋转矩阵的平移分量:

M = cv2.getRotationMatrix2D(center, angle=30, scale=1.0)
M[0, 2] += 50  # 沿x轴正方向平移50像素
M[1, 2] += -20  # 沿y轴负方向平移20像素

五、总结

方法适用场景优点缺点
cv2.getRotationMatrix2D任意角度旋转,可自定义中心和缩放灵活,支持复杂变换需手动处理尺寸和黑边
cv2.rotate90°、180°、270° 的快速旋转简单高效,无需计算矩阵仅支持固定角度

根据需求选择合适的函数,并通过调整参数优化旋转效果。

http://www.dtcms.com/wzjs/836482.html

相关文章:

  • 适合做浏览器主页的网站怎么用阿里云服务器做网站
  • 一级a做爰片免费网站 新闻上海关键词优化按天计费
  • 个人或主题网站建设一学一做短视频网站
  • 游戏咨询网站建设目标是什么公司网站建设需要收集什么信息
  • 凡科网站怎么做建站安徽省建设厅八大员报名网站
  • 如何做婚介网站python编程语言的特点
  • 然后在亚马逊网站上做外贸什么网站建设比较好的
  • 企业网站管理系统设计报告广州市 住房建设局网站
  • 普通建站湛江在线网
  • 网站做百科高校二级网站建设要求
  • discuz培训网站模板下载江西医院网站建设
  • 设计素材网站月收益成都市建设领域信用系统网站
  • 邻水网站建设iis 里没有网站吗
  • 营销型网站制作价格建小公司网站
  • 网站建设首期款个人简历模板可编辑免费
  • 高端品质网站建设wordpress怎样上传目录本
  • 自适应网站一般用什么框架做企业所得税计算公式怎么算
  • 企业网站怎样做优化打码网站如何建设
  • 建设局网站查询个人信息外贸社交网站排名
  • 物流网站怎么做推广营销推广有哪些公司
  • 杭州手机网站开发wordpress更改图片链接
  • 深圳企业营销型网站建设海南省建设集团有限公司
  • 外贸建站什么意思网站后台管理系统哪个好
  • 一站式媒体发布平台国家免费职业技能培训官网
  • 淄博建设局网站谁有手机网站啊介绍一下
  • 企业网站建设内容国内最好的软件网站建设
  • 网站制作软件都是什么软件1元涨1000粉
  • 网站建设行业推广做擦边球的网站
  • 超酷的网站设计上海公司注册网站
  • 微网站开发技巧wordpress php注释