Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy中的白色画布上添加png图像_Python_Opencv_Computer Vision - Fatal编程技术网

Python 在numpy中的白色画布上添加png图像

Python 在numpy中的白色画布上添加png图像,python,opencv,computer-vision,Python,Opencv,Computer Vision,我有一个png图像,它必须覆盖在白色画布上。png图像尺寸为200*200。画布尺寸为512*512 #SOURCE IMAGE img=cv2.imread("xx.png") import cv2 import numpy as np img_1 = np.zeros([512,512,1],dtype=np.uint8) img_1.fill(255) # or img[:] = 255 cv2.imshow('Single Channel Window', img_1) print("

我有一个png图像,它必须覆盖在白色画布上。png图像尺寸为200*200。画布尺寸为512*512

#SOURCE IMAGE 
img=cv2.imread("xx.png")
import cv2
import numpy as np
img_1 = np.zeros([512,512,1],dtype=np.uint8)
img_1.fill(255)
# or img[:] = 255
cv2.imshow('Single Channel Window', img_1)
print("image shape: ", img_1.shape)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里画布是白色区域,img是您的输入图像

canvas = np.zeros((512,512,3))
canvas.fill(255)
img = cv2.imread("xx.png",cv2.IMREAD_COLOR)

canvas[canvas.shape[0]//2-img.shape[0]//2:canvas.shape[0]//2+img.shape[0]//2,
canvas.shape[1]//2-img.shape[1]//2:canvas.shape[1]//2+img.shape[1]//2] = img
这是一个过于简单的代码,假设源代码和画布都是正方形和RGB图像

标志cv2.IMREAD_COLOR很重要,因为画布有3个通道。
如果要使用灰度,请在画布中使用1个通道,如果要使用png(包括alpha通道),请相应地使用4个通道

现在只需将图像置于白色背景中即可。由于图像形状为
200X200
且白色背景形状为
512X512
,因此图像白边距将为
(512-200)/2=156
。因此:

import cv2
import numpy as np

img=cv2.imread("xx.png", 0)
row, col = img.shape  # row = 200, col = 200

img_1 = np.zeros([512,512],dtype=np.uint8)
img_1.fill(255)

margin = (512 - row)//2  
img_1[margin: margin+row, margin: margin+column] =  img

cv2.imshow('Single Channel Window', img_1)
print("image shape: ", img_1.shape)
cv2.waitKey(0)
cv2.destroyAllWindows()
也可以使用白色像素填充原始图像,并获得相同的结果。因此,对于这种情况:

img = cv2.imread('1.png', 0)

margin = (512 - 200)//2   
img_1 = np.pad(img, margin, 'constant', constant_values=255)

当你说你想把这个图像,你想把源图像放在白色画布的哪里?中心?还是左上角?或者两个尺寸都匹配?我想把图像放在白色背景的中心,
img
?200200是这个形状