Python 2.7.3 + OpenCV 2.4 旋转窗口后不适合图像

2024-06-28

我正在尝试将图像旋转一定角度,然后将其显示在窗口中。 我的想法是旋转,然后在新窗口中显示它,并使用根据旧宽度和高度计算出的新窗口宽度和高度:

new_width = x * cos angle + y * sin angle
new_height = y * cos angle + x * sin angle

我期望结果如下所示:

但事实证明结果是这样的:

我的代码在这里:

#!/usr/bin/env python -tt
#coding:utf-8

import sys
import math
import cv2
import numpy as np 

def rotateImage(image, angle):#parameter angle in degrees

    if len(image.shape) > 2:#check colorspace
        shape = image.shape[:2]
    else:
        shape = image.shape
    image_center = tuple(np.array(shape)/2)#rotation center

    radians = math.radians(angle)

    x, y = im.shape
    print 'x =',x
    print 'y =',y
    new_x = math.ceil(math.cos(radians)*x + math.sin(radians)*y)
    new_y = math.ceil(math.sin(radians)*x + math.cos(radians)*y)
    new_x = int(new_x)
    new_y = int(new_y)
    rot_mat = cv2.getRotationMatrix2D(image_center,angle,1.0)
    print 'rot_mat =', rot_mat
    result = cv2.warpAffine(image, rot_mat, shape, flags=cv2.INTER_LINEAR)
    return result, new_x, new_y

def show_rotate(im, width, height):
#    width = width/2
#    height = height/2
#    win = cv2.cv.NamedWindow('ro_win',cv2.cv.CV_WINDOW_NORMAL)
#    cv2.cv.ResizeWindow('ro_win', width, height)
    win = cv2.namedWindow('ro_win')
    cv2.imshow('ro_win', im)
    if cv2.waitKey() == '\x1b':
        cv2.destroyWindow('ro_win')

if __name__ == '__main__':

    try:
        im = cv2.imread(sys.argv[1],0)
    except:
        print '\n', "Can't open image, OpenCV or file missing."
        sys.exit()

    rot, width, height = rotateImage(im, 30.0)
    print width, height
    show_rotate(rot, width, height)

我的代码中一定有一些愚蠢的错误导致了这个问题,但我无法弄清楚...... 我知道我的代码不够Pythonic:(..抱歉..

谁能帮我?

Best,

bearzk


正如BloodyD的回答所说,cv2.warpAffine不会自动将变换后的图像居中。相反,它只是使用变换矩阵来变换每个像素。 (这可以将像素移动到笛卡尔空间中的任何位置,包括原始图像区域之外。)然后,当您指定目标图像大小时,它会抓取该大小的区域,从 (0,0) 开始,即图像的左上角原始框架。转换后的图像中不位于该区域的任何部分都将被切除。

下面是旋转和缩放图像的 Python 代码,结果居中:

def rotateAndScale(img, scaleFactor = 0.5, degreesCCW = 30):
    (oldY,oldX) = img.shape #note: numpy uses (y,x) convention but most OpenCV functions use (x,y)
    M = cv2.getRotationMatrix2D(center=(oldX/2,oldY/2), angle=degreesCCW, scale=scaleFactor) #rotate about center of image.

    #choose a new image size.
    newX,newY = oldX*scaleFactor,oldY*scaleFactor
    #include this if you want to prevent corners being cut off
    r = np.deg2rad(degreesCCW)
    newX,newY = (abs(np.sin(r)*newY) + abs(np.cos(r)*newX),abs(np.sin(r)*newX) + abs(np.cos(r)*newY))

    #the warpAffine function call, below, basically works like this:
    # 1. apply the M transformation on each pixel of the original image
    # 2. save everything that falls within the upper-left "dsize" portion of the resulting image.

    #So I will find the translation that moves the result to the center of that region.
    (tx,ty) = ((newX-oldX)/2,(newY-oldY)/2)
    M[0,2] += tx #third column of matrix holds translation, which takes effect after rotation.
    M[1,2] += ty

    rotatedImg = cv2.warpAffine(img, M, dsize=(int(newX),int(newY)))
    return rotatedImg
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 2.7.3 + OpenCV 2.4 旋转窗口后不适合图像 的相关文章

  • python sqlite ValueError:无法解析日期时间字符串

    我有一个 txt 文件 用于填充 sqlite 表 FoodConsumed tb class FoodConsumed Tb db Model tablename foodconsumed tb id db Column db Integ
  • Python Twisted WebSocket 客户端

    过去曾使用过 Twisted 我想知道是否有办法让 WebSocket 客户端支持发挥作用 浏览文档我只能找到服务器实现 塔文多高速公路 http www tavendo de autobahn 是一个非常有特色的 websockets 实
  • pycharm自动将制表符转换为空格

    我正在使用 pycharm IDE 进行 python 开发 它对于 django 代码来说工作得很好 因此怀疑将制表符转换为空格是默认行为 但是在 python IDE 中到处都会出现错误 因为它无法自动将制表符转换为空格 有没有办法实现
  • R 中的 Python 链接式数据整理

    我是 Python 新手 来自 R 环境 我喜欢 R 的一件事是能够编写代码 在一个可读的代码块中对数据进行多种转换 但对我来说 在 Python 中找到这种风格的代码非常困难 我想知道你们中的一些人是否可以指导在哪里可以找到有关该特定风格
  • Keras 的 ImageDataGenerator 是否随机对每个图像应用转换?

    我正在使用 Keras ImageDataGenerator 类训练 CNN 我的代码看起来像这样 from keras callbacks import LearningRateScheduler from keras callbacks
  • 如何从 gridsearchcv 绘制决策树?

    我试图绘制由 GridSearchCV 形成的决策树 但它给了我一个属性错误 AttributeError GridSearchCV object has no attribute n features 但是 如果我尝试在没有 GridSe
  • Python,针对频繁模式的网络日志数据挖掘

    我需要开发一个用于网络日志数据挖掘的工具 由于在特定用户会话中请求了许多 url 序列 从 Web 应用程序日志中检索 我需要找出网站用户的使用模式和组 集群 我是数据挖掘的新手 现在经常检查谷歌 发现一些有用的信息 即查询似乎指向几乎完全
  • Python 中的双 SSH 隧道

    今天 我在命令行中使用 ssh 将端口从远程服务器转发 使用中间服务器到我的本地计算机 这是我在 shell 中使用的命令 ssh user remote server L 2443 localhost 433 此 ssh 会话使用 ssh
  • 如何防止 python 请求对我的 URL 进行百分比编码?

    我正在尝试使用 python 中的 requests get 获取以下格式的 URL usr local bin python import requests print requests versiom url http api exam
  • swaplevel() 和 reorder_levels() 有什么区别?

    在使用 pandas 的分层索引级别时 有什么区别swaplevel https pandas pydata org pandas docs stable generated pandas DataFrame swaplevel html
  • python中带括号和不带括号调用函数有什么区别? [复制]

    这个问题在这里已经有答案了 我有个问题 假设我们有函数 hello 带括号和不带括号调用有什么区别 当我调用 hello 时 它引用的是一个值等于此函数的对象 或者也许我错了 当我不带括号调用它时会发生什么 我想知道为什么 def hell
  • 如何在 pywebview 中使无框窗口可拖动?

    我最近一直在使用 pywebview 和 Flask 来开发桌面应用程序 我想使用无框窗口功能并创建自己的标题栏 但问题是我不知道如何使该无框窗口可拖动 文档说它可以通过拖动任何点来移动 但对我来说情况并非如此 有任何想法吗 拖动区域 ht
  • 使用 pip freeze 安装 numpy

    I need to install Numpy version 1 17 1 but every time it just freezes I have now tried multiple times and I have been wa
  • 贝塞尔曲线python的递归函数

    我被要求设计一个名为 Bezier 的递归函数 其参数是给定点的列表 以及必须评估的点 它返回贝塞尔曲线中由点列表的控制点定义的点 这是我所做的算法 def Bezier point list t if len point list 1 r
  • Python:UnboundLocalError:赋值前引用的局部变量“count”[重复]

    这个问题在这里已经有答案了 我不明白我的 Python 代码有什么问题 它给了我以下错误 Traceback most recent call last File main py line 77 in
  • 启动robotframework-RIDE(机器人框架IDE)时出错

    我已经安装了Robot Framework并安装了wxPython 然后安装了Ride 当我通过执行启动它时python ride py 它会遇到如下错误 我相信这与wxPython版本有关 不确定 有一系列UnreprError像这样
  • 有没有办法向后遍历 dask 数据帧?

    我想要read parquet但从开始的地方向后阅读 假设索引已排序 我不想将整个镶木地板读入内存 因为这违背了使用它的全部意义 有什么好的方法可以做到这一点吗 假设数据帧已建立索引 索引的反转可以通过两步过程完成 反转分区的顺序并反转每个
  • 传递到 Flask 的可能路线列表?

    我正在学习 Flask 有一个关于动态路由的问题 是否可以传入接受的路由列表 我注意到any转换器具有潜力 但很难找到使用中的示例 基本上我有不同的端点组 它们应该在它们之间触发相同的操作 这就是我的意思 cities New York L
  • 如何使用 TfIdfVectorizer 通过 SciKitLearn 对文档进行分类?

    以下示例展示了如何使用 Sklearn 20 新闻组数据训练分类器 gt gt gt from sklearn feature extraction text import TfidfVectorizer gt gt gt categori
  • 多处理冻结计算机

    我通过使用多处理提高了执行时间 但我不确定 PC 的行为是否正确 它会冻结系统 直到所有进程完成 我使用的是 Windows 7 和 Python 2 7 也许我做错了 这就是我所做的 def do big calculation sub

随机推荐

  • 自定义 ContentProvider 的 fillWindow() 方法中该怎么做?

    我正在编写一个自定义 ContentProvider 它提供由单个常量字符串组成的内容 我将其表示为具有列 id 0 和 value SomeString 的单行表 该字符串不存储在数据库中 因此我开发了 CrossProcessCurso
  • 如何用CSS制作一个等宽的表格?

    我有一个包含这样的表格的文档 table tr td Word td td Definition td tr tr td Word td td Definition td tr tr td Word td td Definition td
  • 为 IronPython 安装 numpy

    我想使用 c 在 IronPython 中运行一些代码 在此代码中我需要使用 numpy 所以我尝试使用以下命令安装它 ipy X Frames m pip install U numpy 不幸的是 我收到一个错误和一条返回消息 告诉我安装
  • 尝试以编程方式在 Equinox 中安装包时出现 nullPointerException

    我正在尝试做一个简单的演示 在其中启动 Equinox 框架 然后加载创建的教程包 通过教程 我不断得到NullPointerExceptions这是堆栈跟踪 Exception in thread main java lang NullP
  • 如何通过删除移动物体来从多张图像中获取背景?

    我用固定相机拍摄了同一场景的多张图像 其中有移动的物体 我不明白如何在 Python 中使用这些图像通过删除所有移动对象来检索背景图像 任何帮助 将不胜感激 谢谢 下面附有图片 在这种情况下 我希望最终的图像没有任何人参与其中 image1
  • mockito:有没有办法捕获存根方法的返回值?

    如果我模拟一个方法来返回某个对象的新实例 如何捕获返回的实例 E g when mock someMethod anyString thenAnswer new Answer Object answer InvocationOnMock i
  • 如何在 Mathematica 中格式化列中的两个单独列表,而不是行?

    这看起来应该是小菜一碟 但我还没有在 Mathematica 的文档中找到答案 假设我有两个单独的列表 例如 x 1 2 3 4 5 和 y 1 4 9 16 25 我想将这些列表格式化为表格 每个列表作为一列 如下所示 x y 1 1 2
  • 带图案的图片有时会显示得很奇怪

    我的网站是一家服装店 我的合作伙伴抱怨了以下问题 The pictures of clothing with more complex patterns checkerboard for example displays like this
  • .htaccess,正确重写同名目录和文件

    到目前为止 我的网站有一些静态页面 其中之一是 portfolio 除此之外 我的 htaccess 隐藏了 html 扩展名 我想添加一个投资组合目录 但我不想将现有的投资组合页面移动到投资组合目录中作为默认索引文件 我的 portfol
  • Java加解密中IV和salt的处理

    所以我试图在方法中解密消息 但它不起作用 因为我需要这样做cipher init Cipher ENCRYPT MODE secret 在我尝试添加之前new IvParameterSpec iv to cipher init Cipher
  • 对 Bitstamp 进行身份验证的 Java Jersey REST 调用

    我正在尝试对 Bitstamp 进行私人 REST 调用 请参阅https www bitstamp net api https www bitstamp net api 但是 我收到以下回复 错误 缺少密钥 签名和随机数参数 他们在 AP
  • dask 可以并行读取 csv 文件吗?

    我正在将大型文本文件转换为 HDF 存储 希望能够更快地访问数据 转换工作正常 但是从 csv 文件读取不是并行完成的 它真的很慢 SSD 上的 1GB 文本文件大约需要 30 分钟 所以我的猜测是它不受 IO 限制 有没有办法让它在多个线
  • python中获取动物数量的函数[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 您好 这些函数根据猪和鸡的头部和腿的输入返回这两种动物的数量 我对Python真的很陌生 我不明白它是如何工作的 你能详
  • 从视频中重建 Veritasium 的情节

    受到 Veritasium Youtube 视频之一的启发 他在其中解释了混沌分叉图 逻辑图 数学方程很简单 X i 1 R X i 1 X i 他绘制的第一张图 这个X i 值 y 轴值 范围为 0 到 1 与迭代时间i x 轴值 计算次
  • struts2 Ajax错误结果

    我在struts xml中有这个配置
  • silverlight代码需要保护吗?

    我不太明白 Silverlight 代码如何在浏览器中工作 程序集是否下载到客户端计算机 是否有可能使用 Reflector 或类似工具对代码进行反编译 如果是这样 有哪些选择可以保护代码 net 混淆器可以与 Silverlight 一起
  • 数组列表的复制构造函数

    我刚刚读到人们认为的 ArrayList 的深层复制 new ArrayList lt gt originalList 将创建一个浅表副本 我写了一个小演示 ArrayList
  • 提取子字符串与字符串中第一次出现的数字之间的模式

    以下是文件的内容 xxx component1 1 0 2 2acd314 xc linux x86 64 Release devel r xxx component2 3 0 1 fg3sdhd xc linux x86 64 Relea
  • 将活动图链接到要访问的实体

    我们如何在活动图中表示要访问或更新哪些实体 这是作为活动图的一部分完成还是单独完成 您指定哪个Classes使用访问或更新Pins on an Action或使用ActivityParameterNode on an Activity Th
  • Python 2.7.3 + OpenCV 2.4 旋转窗口后不适合图像

    我正在尝试将图像旋转一定角度 然后将其显示在窗口中 我的想法是旋转 然后在新窗口中显示它 并使用根据旧宽度和高度计算出的新窗口宽度和高度 new width x cos angle y sin angle new height y cos