怎样将图片尺寸调整小python_python – 如何将图像裁剪,调整大小表示为仿射变换?...

本文介绍了如何使用Python中的scipy和OpenCV库进行图像的仿射变换,包括裁剪和调整尺寸。示例代码展示了如何创建仿射变换矩阵,并应用于图像,以达到在四个方向上均匀裁剪并缩放图像的效果。
摘要由CSDN通过智能技术生成

我有一个图像被裁剪并调整大小到图像输入大小.

据我所知,这与仿射变换相同.

我试图简化下面的代码,所以它通过使用函数来做同样的事情:(最后的例子如下面的例子).

scipy.ndimage.affine_transform()

问题是我并不真正了解该函数的参数,因此我无法使用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, 0, 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');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值