Python 如何在图像的放大区域中修复旋转输出?

Python 如何在图像的放大区域中修复旋转输出?,python,python-2.7,matplotlib,Python,Python 2.7,Matplotlib,我想缩放图像的一部分并插入到同一个绘图中。现在,我正在使用mpl_工具包来完成这项工作。但是,它会导致区域旋转缩放,如下图所示。我如何使用Python修复它 这是我的全部代码 import matplotlib.gridspec as gridspec import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes from mpl_toolkits.axes_

我想缩放图像的一部分并插入到同一个绘图中。现在,我正在使用mpl_工具包来完成这项工作。但是,它会导致区域旋转缩放,如下图所示。我如何使用Python修复它

这是我的全部代码

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
import matplotlib.image as mpimg
import matplotlib.patches as patches

def zoom_in_rec(input, ax,rect, cmap):
    axins = zoomed_inset_axes(ax, 2, loc=3)  
    x1, x2, y1, y2 = rect.get_x(), rect.get_x()+rect.get_width(),rect.get_y(), rect.get_y()+rect.get_height() # specify the limits
    axins.set_xlim(x1, x2)  # apply the x-limits
    axins.set_ylim(y1, y2)  # apply the y-limits
    mark_inset(ax, axins, loc1=3, loc2=4, fc="none", ec="1.0")
    plt.yticks(visible=False)
    plt.xticks(visible=False)
    axins.imshow(input, cmap=cmap)

if __name__ == "__main__":
    img = mpimg.imread('lena.bmp')
    #Plot
    fig = plt.figure(figsize=(128,128))
    fig.patch.set_facecolor('white')
    gs1 = gridspec.GridSpec(1,1)
    gs1.update(wspace=0.02, hspace=0.02)  # set the spacing between axes.
    ax1 = plt.subplot(gs1[0])
    ax1.imshow(img,cmap='gray')
    rect1 = patches.Rectangle((200, 200), 120, 80, linewidth=3, edgecolor='r', facecolor='none')
    zoom_in_rec(img, ax1,rect1, cmap='gray')
    plt.show()
这是莉娜的照片

这是我当前的输出

图像和绘图的坐标系不同,图像的坐标系原点位于左上角,y轴向上向下,而绘图的坐标系位于左下角,y轴从下至上。要解决此问题,我们可以使用numpy的flipud函数:

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
import matplotlib.image as mpimg
import matplotlib.patches as patches
import numpy as np

def zoom_in_rec(input, ax,rect, cmap):
    axins = zoomed_inset_axes(ax, 2, loc=3)  # zoom-factor: 2.5, location: upper-left
    x1, x2, y1, y2 = rect.get_x(), rect.get_x()+rect.get_width(),rect.get_y(), rect.get_y()+rect.get_height() # specify the limits
    axins.set_xlim(x1, x2)  # apply the x-limits
    axins.set_ylim(y1, y2)  # apply the y-limits
    mark_inset(ax, axins, loc1=3, loc2=4, fc="none", ec="1.0")
    plt.yticks(visible=False)
    plt.xticks(visible=False)
    # flip image
    rot = np.flipud(input)
    axins.imshow(rot, cmap=cmap)

if __name__ == "__main__":
    img = mpimg.imread('/home/eyllanesc/Downloads/lena.png')
    #Plot
    fig = plt.figure(figsize=(128,128))
    fig.patch.set_facecolor('white')
    gs1 = gridspec.GridSpec(1,1)
    gs1.update(wspace=0.02, hspace=0.02)  # set the spacing between axes.
    ax1 = plt.subplot(gs1[0])
    ax1.imshow(img,cmap='gray')
    rect1 = patches.Rectangle((200, 200), 120, 80, linewidth=3, edgecolor='r', facecolor='none')
    zoom_in_rec(img, ax1,rect1, cmap='gray')
    plt.show()

这正是我所期望的。谢谢您知道如何将放大区域的矩形更改为红色,而不是当前版本中的黑色。非常感谢