OpenCV -我需要将彩色图像插入到白色图像中,

brc7rcf0  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(168)

我插入白色图像到彩色图像与此代码,它是确定的:

face_grey = cv.cvtColor(face, cv.COLOR_RGB2GRAY)
for row in range(0, face_grey.shape[0]):
  for column in range(face_grey.shape[1]):
    img_color[row + 275][column + 340] = face_grey[row][column]
plt.imshow(img_color)

但是,当我尝试用这个代码将彩色图像插入白色图像时,我得到错误:
第一个

v8wbuo2f

v8wbuo2f1#

彩色图像需要3个通道来表示红色、绿色和蓝色分量。
灰度图像只有一个通道-灰色。
你不能把一个3通道图像放在一个1通道图像中,就像你不能把一个3针插头放在一个单孔插座中一样。
您需要首先将灰色图像提升到3个相同的通道:

background = cv2.cvtColor(background, cv2.COLOR_GRAY2BGR)

示例:

# Make grey background, i.e. 1 channel
background = np.full((200,300), 127, dtype=np.uint8)

# Make small colour overlay, i.e. 3 channels
color = np.random.randint(0, 256, (100,100,3), dtype=np.uint8)

# Upgrade background from grey to BGR, i.e. 1 channel to 3 channels
background = cv2.cvtColor(background, cv2.COLOR_GRAY2BGR)

# Check its new shape
print(background.shape)       # prints (200, 300, 3)

# Paste in small coloured image
background[10:110, 180:280] = color

nhhxz33t

nhhxz33t2#

彩色图像的三个颜色通道rgb的形状为(n,m,3)。灰度图像的形状为(n,m,1),因为颜色信息被丢弃。错误发生在以下行中:

img_gray[row + 275][column + 340] = face[row][column]

img_gray[row+275][column + 340]只需要一个值,因为img_gray的形状为a(height,width,1)。face[row][column]的形状为(3,)
如果执行以下操作,您将看到这一点:

print(f"{ img_gray[row+275][column + 340].shape} and {face[row][column].shape}")

相关问题