裁剪图像后无法调用 .show() 函数

Posted

技术标签:

【中文标题】裁剪图像后无法调用 .show() 函数【英文标题】:I can't call the .show() function after I crop an image 【发布时间】:2020-12-19 07:48:46 【问题描述】:

我正在尝试在此处裁剪图像,但是每次在裁剪后的图像上运行 .show() 时,都会出现错误。

使用 Python 3.9.1 和 Pillow 8.0

from PIL import Image
image = Image.open('image.PNG')
print (image.size)
width, height = image.size

print (width)
print (height)

newWidth = int(width/2)
newHeight = int(height/2)

print (newWidth)
print (newHeight)

img = image.crop((newWidth,newHeight,newWidth,newHeight))

img.show()

这就是错误的样子

【问题讨论】:

请复制错误代码并粘贴到这里,不要粘贴图片 crop() 返回的图像可能不好,因为您传递给它的参数不正确。请参阅documentation。 box 参数应该是(left, upper, right, lower),这不是您要传递的内容——您定义了一个宽度和高度为零的矩形。 【参考方案1】:

使用cv2的替代方法

import cv2
img=cv2.imread("image.PNG")
new_height=int(img.shape[0]/2)
new_width=int(img.shape[1]/2)
img=img[0:new_height,0:new_width] #cropping image
cv2.imshow("cropped_image", img)
cv2.waitKey(0)

【讨论】:

【参考方案2】:

如果您想剪切图像的中心,这一定会有所帮助。问题出在 CROP 函数的参数中。你应该用新图像的角坐标来填充它。写英文对我来说很难,所以如果你不明白的话,请问我

from PIL import Image

image = Image.open(r'image.png')
print(image.size)
width, height = image.size

print(width)
print(height)

newWidth = int(width / 2)
newHeight = int(height / 2)

print(newWidth)
print(newHeight)

left = width - newWidth // 2
upper = height - newHeight // 2
right = left + newWidth
lower = upper + newHeight

img = image.crop((left, upper, right, lower))

img.show()

【讨论】:

以上是关于裁剪图像后无法调用 .show() 函数的主要内容,如果未能解决你的问题,请参考以下文章

mui---调用图像裁剪android

无法在android中裁剪图像

Android:在捕获或从图库中挑选后裁剪图像

裁剪后的Android图像视图仅显示小图像

加载此 jquery 插件后删除特定类

裁剪图像后无法正确显示