使用Python将图像填充到某个大小

使用Python将图像填充到某个大小,python,image,opencv,Python,Image,Opencv,我正在编写一个手写识别应用程序,我的输入必须具有一定的大小(128x128)。当我检测到一封信时,它看起来是这样的: 例如,该图像的大小为40x53。我想将其设置为128x128,但简单地调整大小会降低质量,尤其是对于较小的图像。我想以某种方式把其余部分填满128x128,中间用40x53。背景色也应该保持相对不变。我正在使用Python的opencv,但我是新手。我如何才能做到这一点,甚至有可能吗?我相信您希望缩放您的图像 此代码可能有助于: import cv2 img = cv2.im

我正在编写一个手写识别应用程序,我的输入必须具有一定的大小(128x128)。当我检测到一封信时,它看起来是这样的:


例如,该图像的大小为40x53。我想将其设置为128x128,但简单地调整大小会降低质量,尤其是对于较小的图像。我想以某种方式把其余部分填满128x128,中间用40x53。背景色也应该保持相对不变。我正在使用Python的opencv,但我是新手。我如何才能做到这一点,甚至有可能吗?

我相信您希望缩放您的图像

此代码可能有助于:

import cv2

img = cv2.imread('name_of_image', cv2.IMREAD_UNCHANGED)

# Get original size of image
print('Original Dimensions: ',img.shape)

# Percentage of the original size
scale_percent = 220

width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)

# Resize/Scale the image
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)

# The new size of the image
print('Resized Dimensions: ',resized.shape)

cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

我相信你想放大你的形象

此代码可能有助于:

import cv2

img = cv2.imread('name_of_image', cv2.IMREAD_UNCHANGED)

# Get original size of image
print('Original Dimensions: ',img.shape)

# Percentage of the original size
scale_percent = 220

width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)

# Resize/Scale the image
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)

# The new size of the image
print('Resized Dimensions: ',resized.shape)

cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里,您可以使用
outputImage
获取所需内容。基本上,我使用
copyMakeBorder
方法添加了一个边框。有关更多详细信息,请参阅。必须在
参数中设置所需的颜色值。现在它是白色的[255255]

但我更愿意建议您调整原始图像的大小,似乎这是比您要求的更好的选择。调整图像大小您可以在以下代码中使用
调整大小
。为了方便起见,我在代码中添加了这两种方法

import cv2
import numpy as np
inputImage = cv2.imread('input.jpg', 1)

outputImage = cv2.copyMakeBorder(inputImage,37,38,44,44,cv2.BORDER_CONSTANT,value=[255,255,255])

resized = cv2.resize(inputImage, (128,128), interpolation = cv2.INTER_AREA)
cv2.imwrite('output.jpg', outputImage)
cv2.imwrite('resized.jpg', resized)

在这里,您可以使用
outputImage
获取所需内容。基本上,我使用
copyMakeBorder
方法添加了一个边框。有关更多详细信息,请参阅。必须在
参数中设置所需的颜色值。现在它是白色的[255255]

但我更愿意建议您调整原始图像的大小,似乎这是比您要求的更好的选择。调整图像大小您可以在以下代码中使用
调整大小
。为了方便起见,我在代码中添加了这两种方法

import cv2
import numpy as np
inputImage = cv2.imread('input.jpg', 1)

outputImage = cv2.copyMakeBorder(inputImage,37,38,44,44,cv2.BORDER_CONSTANT,value=[255,255,255])

resized = cv2.resize(inputImage, (128,128), interpolation = cv2.INTER_AREA)
cv2.imwrite('output.jpg', outputImage)
cv2.imwrite('resized.jpg', resized)

我提到我不想调整/缩放它,我想基本上增加更多的内容,直到它达到我想要的大小。基本上从10x10开始,我想将它“边框”到100x100,而不是调整大小。我提到我不想调整/缩放它,我想基本上添加更多内容,直到它达到我想要的大小。基本上从10x10开始,我想把它“边框”到100x100,而不是调整它的大小。我想这就是我需要的,是的。我调整大小的问题是,我的神经网络样本大小以图像为中心,周围有足够的空间,因此我不确定它对占用整个空间的字母分类的效果如何。更不用说在调整像“I”这样的细字母的大小时,它会将它们分散得太多,以至于连我自己都不知道它是什么。我将尝试你提到的边界方法,看看它是否适合我。这完全取决于你。希望你能在这里找到答案。是的,我认为边境是一条出路。谢谢,我会接受你的回答。我想这就是我需要的,是的。我调整大小的问题是,我的神经网络样本大小以图像为中心,周围有足够的空间,因此我不确定它对占用整个空间的字母分类的效果如何。更不用说在调整像“I”这样的细字母的大小时,它会将它们分散得太多,以至于连我自己都不知道它是什么。我将尝试你提到的边界方法,看看它是否适合我。这完全取决于你。希望你能在这里找到答案。是的,我认为边境是一条出路。谢谢,我会接受你的回答。