python – 如何将图像裁剪,调整大小表示为仿射变换?
发布时间:2020-12-20 13:53:09  所属栏目:Python  来源:网络整理 
            导读:我有一个图像被裁剪并调整大小到图像输入大小. 据我所知,这与仿射变换相同. 我试图简化下面的代码,所以它通过使用函数来做同样的事情:(最后的例子如下面的例子). scipy.ndimage.affine_transform() 问题是我并不真正了解该函数的参数,因此我无法使用affine_t
                
                
                
            | 
 我有一个图像被裁剪并调整大小到图像输入大小. 
  据我所知,这与仿射变换相同. 我试图简化下面的代码,所以它通过使用函数来做同样的事情:(最后的例子如下面的例子). scipy.ndimage.affine_transform() 问题是我并不真正了解该函数的参数,因此我无法使用affine_transform()函数实现优雅的单行程. import numpy as npy
import PIL.Image
import scipy.misc as smc
import scipy.ndimage as snd
#crop factor
s = 1.045    
#input image
img2crop = npy.float32(PIL.Image.open("input_image.jpg)")
h,w = img2crop.shape[:2]    #get the dimensions of the input image
#Box-crop values: calculate new crop Dimensions based on 's'
wcrop =  float(w) / (s)
hcrop =  float(wcrop) / (float(w) / float(h))
hcrop = int(round(hcrop))
wcrop = int(round(wcrop))
#crop applied from top-left to right and bottom
b_left = 0
b_top = 0
b_width = wcrop
b_height = hcrop
b_box = (b_left,b_top,b_width,b_height)
#cropped region
region = img2crop.crop(b_box)
#resize cropped region back to input size
resized_region = smc.imresize(region,(h,w),interp='nearest',mode=None)
#save cropped and resized region as new file in output folder
PIL.Image.fromarray(np.uint8(resized_newregion)).save("output_image.jpg")题: 这个例子在所有4个侧面均匀地作物,中心定向 s = 0.0065
cropped_and_resized_image = snd.affine_transform(input_image.jpg,[1-s,1-s,1],[h*s/2,w*s/2,0],order=1)
PIL.Image.fromarray(npy.uint8(cropped_and_resized_image)).save("output_image_at.jpg")提前感谢您的反馈. 解决方法
 这是OpenCV实现 
  
  
  # OpenCV implementation of crop/resize using affine transform
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
import cv2
src_rgb = cv2.imread('test_img.jpg')
# Source width and height in pixels
src_w_px = 640 
src_h_px = 480 
# Target width and height in pixels
res_w_px = 640
res_h_px = 480
# Scaling parameter
s = 2.0
Affine_Mat_w = [s,res_w_px/2.0 - s*src_w_px/2.0]
Affine_Mat_h = [0,s,res_h_px/2.0 - s*src_h_px/2.0]
M = np.c_[ Affine_Mat_w,Affine_Mat_h].T 
res = cv2.warpAffine(src_rgb,M,(res_w_px,res_h_px))
# Showing the result
plt.figure(figsize=(15,6))
plt.subplot(121); plt.imshow(src_rgb); plt.title('Original image');
plt.subplot(122); plt.imshow(res); plt.title('Image warped Affine transform');(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
