要用Python和OpenCV给图片加上logo,可以按照以下步骤实现:
-
读取logo和image图片。
-
调整logo的大小以适应image。
-
将logo放置在image的指定位置。
-
将logo和image合并。
以下是实现代码:
import cv2 # 读取logo和image图片 logo = cv2.imread('logo.png', cv2.IMREAD_UNCHANGED) # 读取带透明通道的logo image = cv2.imread('image.jpg') # 检查图片是否成功读取 if logo is None or image is None: print("图片读取失败,请检查文件路径是否正确。") exit() # 获取logo的尺寸 logo_height, logo_width, logo_channels = logo.shape # 获取image的尺寸 image_height, image_width, image_channels = image.shape # 调整logo的大小(例如,将logo的宽度设置为image宽度的1/5) scale = 0.2 # 调整比例 new_width = int(image_width * scale) new_height = int(logo_height * (new_width / logo_width)) logo = cv2.resize(logo, (new_width, new_height)) # 获取调整后logo的尺寸 logo_height, logo_width, logo_channels = logo.shape # 计算logo在image中的位置(例如,右下角) x_offset = image_width - logo_width - 10 # 右下角,留10像素的边距 y_offset = image_height - logo_height - 10 # 提取logo的alpha通道(透明度) alpha_logo = logo[:, :, 3] / 255.0 alpha_image = 1.0 - alpha_logo # 将logo叠加到image上 for c in range(0, 3): # 遍历RGB通道 image[y_offset:y_offset + logo_height, x_offset:x_offset + logo_width, c] = ( alpha_logo * logo[:, :, c] + alpha_image * image[y_offset:y_offset + logo_height, x_offset:x_offset + logo_width, c] ) # 保存结果 cv2.imwrite('image_with_logo.jpg', image) # 显示结果(可选) cv2.imshow('Image with Logo', image) cv2.waitKey(0) cv2.destroyAllWindows()
代码说明:
-
读取图片:使用
cv2.imread
读取logo和image图片。注意,logo图片需要是带有透明通道的PNG格式,因此使用cv2.IMREAD_UNCHANGED
读取。 -
调整logo大小:根据image的尺寸,调整logo的大小。
-
计算logo位置:将logo放置在image的右下角,并留出一定的边距。
-
叠加logo:使用alpha通道(透明度)将logo叠加到image上。
-
保存和显示结果:将结果保存为新图片,并可选地显示出来。
注意事项:
-
确保logo图片是PNG格式,且带有透明通道。
-
如果logo图片没有透明通道,可以跳过alpha通道的处理部分,直接将logo叠加到image上。
运行代码后,image_with_logo.jpg
将是带有logo的image图片。