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'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |