python - 添加两个不同大小的图像或填充白色像素以使其在 Python 中更大
问题描述
我有一个大小为 1000x300 的图像,我想将图像制作为 4992x6400 的大小。基本上我不想调整图像大小
所以有两种不同的方法,我认为我们可以做到。
- 我们可以创建所需大小为 4992x6400 的白色图像,并将白色像素图像与较小的图像相加
import cv2
WhiteBackground = np.full(img.shape, 255, dtype=np.uint8)
cv2.imwrite(r"white.png",WhiteBackground)
readWhiteImage=cv2.imread(r"white.png")
readSmallImage=cv2.imread(r"small.png")
在上面的代码之后,我很惊讶如何添加我尝试使用的两个不同大小的图像cv2.add
,numpy.add
因为图像的大小不同并且也使用了cv2.addWeighted
它,但都没有成功。
我知道 cv2.add 和 numpy.add 不起作用,因为图像的大小不同,但不知道cv2.addWeighted
因为大小不同,这也会出错
- 用白色像素填充以将小图像保持在左上角并在其左侧和底部填充白色像素..我不知道如何实现这一点......
解决方案
在 Python/OpenCV 中至少有两种可能的方法可以做到这一点。您可以使用 cv2.copyMakeBorder() 或使用 Numpy 切片将输入复制到白色背景图像的左上角。这是后者。
输入:
import cv2
import numpy as np
# read image
img = cv2.imread('numbers.png')
ht, wd, cc= img.shape
# create new image of desired size and color (white) for padding
ww = 4992
hh = 6400
color = (255,255,255)
result = np.full((hh,ww,cc), color, dtype=np.uint8)
# set offsets for top left corner
xx = 0
yy = 0
# copy img image into center of result image
result[yy:yy+ht, xx:xx+wd] = img
# view result
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# save result
cv2.imwrite("numbers_inserted.jpg", result)
结果:
推荐阅读
- jquery - 如何更改子属性jquery
- c# - 在 Unity C# 中使用两个麦克风进行录音
- mysql - 按月左连接列过滤,然后交叉连接到主表
- facebook - Instagram 业务发现 API 视频 thumbnail_url
- java - 观看大量目录的最佳方式?
- python - 如何将 Spark Dataframe 列的每个值作为字符串传递给 python UDF?
- html - 如何将 Google 驱动器文件的绝对文件路径作为 url 获取?
- html - 预加载多种字体格式
- java - 当我构建一个线程来调用 JNI C++ 函数时,程序崩溃了
- php - 使用 laravel 将文件夹上传到服务器