目录
Opencv实现
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 绘制矩形框(左上角和右下角坐标)
start_point = (100, 100)
end_point = (200, 200)
color = (0, 255, 0) # 绿色
thickness = 2 # 线宽
cv2.rectangle(image, start_point, end_point, color, thickness)
# 绘制点(坐标)
point = (300, 300)
color = (0, 0, 255) # 红色
thickness = -1 # 填充点
cv2.circle(image, point, radius=5, color=color, thickness=thickness)
# 显示绘制结果
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
进一步,如何给矩形框加上浅色蒙版?
import cv2
import numpy as np
# 加载图像
image = cv2.imread('path_to_your_image.jpg')
# 绘制矩形框
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 创建一个与原图同样大小的全绿色图像,然后在矩形区域内填充颜色
overlay = image.copy()
cv2.rectangle(overlay, (x1, y1), (x2, y2), (0, 255, 0), -1) # -1 表示填充整个矩形
# 合成蒙版和原图,这里的 0.3 是绿色蒙版的透明度
alpha = 0.3
image_new = cv2.addWeighted(overlay, alpha, image, 1 - alpha, 0)
# 显示图像
cv2.imshow('Image with Green Mask', image_new)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存图像
cv2.imwrite('output_image_with_green_mask_cv.jpg', image_new)
注:在 OpenCV 中,我们可以使用 cv2.addWeighted
函数来将绿色蒙版与原始图像合成,以实现透明效果。
PIL实现
from PIL import Image, ImageDraw
# 加载图像
image = Image.open('path_to_your_image.jpg')
# 创建一个 ImageDraw 对象
draw = ImageDraw.Draw(image)
# 绘制矩形框,参数分别是:矩形框的左上角坐标、右下角坐标、颜色和线条粗细(可选)
draw.rectangle([x1, y1, x2, y2], outline='green', width=2)
# 绘制点,参数分别是:点的坐标列表和颜色
draw.point((x, y), fill='red')
# 显示图像
image.show()
# 保存图像
image.save('output_image_with_pil.jpg')
进一步?
from PIL import Image, ImageDraw
# 加载图像
image = Image.open('path_to_your_image.jpg')
# 创建一个 ImageDraw 对象
draw = ImageDraw.Draw(image)
# 绘制矩形框
draw.rectangle([x1, y1, x2, y2], outline='green', width=2)
# 绘制一个半透明的绿色矩形蒙版
# 创建一个带有透明度的绿色
green_mask_color = (0, 255, 0, 128) # 最后一个值是 alpha (128 表示半透明)
# 在矩形内部填充绿色蒙版
draw.rectangle([x1, y1, x2, y2], fill=green_mask_color)
# 显示图像
image.show()
# 保存图像
image.save('output_image_with_green_mask_pil.png') # 注意保存为 PNG 以保留透明度
注:在 Pillow 中,我们可以通过指定 RGBA 颜色模式来设置颜色的透明度。
Matplotlib实现
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# 读取图像
image = plt.imread('image.jpg')
# 创建画布和子图
fig, ax = plt.subplots()
# 绘制矩形框
rect = patches.Rectangle((100, 100), 100, 100, linewidth=2, edgecolor='g', facecolor='none')
ax.add_patch(rect)
# 绘制点
ax.plot(300, 300, 'ro', markersize=5)
# 显示绘制结果
ax.imshow(image)
plt.axis('off') # 关闭坐标轴
plt.show()