Python,OpenCV制作全透明图,简单的图片

本文介绍了如何使用Python的OpenCV库创建全透明图像,并展示了绘制圆、文字、矩形、正方形和椭圆等基本图形的方法。此外,还详细讲解了如何制作带有透明水印的logo,包括图像的缩放和设置不透明度。通过实例代码,读者可以学会在Python中进行图像处理和添加透明效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 基本的图片操作方法

图片的读写与展示;(默认opencv读出来是 3通道的BGR图;透明图实质上是 BGRA的4通道图 )
图片的旋转、无损旋转
图片的放大、缩小、保留宽高比的放大缩小
绘制圆、文字、矩形、正方形、椭圆

1.1 效果图

在这里插入图片描述

1.2 源码

import numpy as np
import cv2

width = 600
height = 550
img = np.ones((height, width, 4)) * (255, 255, 255, 0)
# cv2.imshow("origin", img)
# cv2.waitKey(0)

# 绘制圆
cX = 131.5
cY = 131.5
radius = 91.50425720214844
# - (int(cX), int(cY)) 圆心像素值
# - radius 半径
# - (0, 0, 255) 颜色
# - -1 负数:填充,正数:线条粗细
cv2.circle(img, (int(cX), int(cY)), int(radius), (0, 0, 255), -1)

# 绘制文字
# - img 图片
# - "Good job" 文字内容
# - (int(cX - 10), int(cY)) 绘制起始的像素
# - cv2.FONT_HERSHEY_SIMPLEX
# - 0.45 基于字体特定基大小的比例因子
# - (0, 255, 0) 颜色
# - 2 绘制文本的线条粗细
cv2.putText(img, "Good job", (300, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 5)

# 绘制矩形
# - img 图片
# - (int(cX),int(cY)) 矩形左上起始点坐标,必须为正数
# - (int(cX) + w, int(cY) + h) 右下角终点
# - (255, 0, 0)
# - 2 正数:线条粗细,负数:填充
w = 60
h = 30
cv2.rectangle(img, (250,250), (250 + w, 250 + h), (255, 0, 0), 3)

# 绘制正方形(同矩形,宽度、高度一致)
w = 80
h = 80
cv2.rectangle(img, (100,300), (100 + w, 300 + h), (0, 255, 255), -1)

# 绘制椭圆
# - img 图像
# - (int(cX), int(cY)) 中心
# - (150,100) 长轴,短轴
# - angle 角度
# - start_angle 开始角度
# - end_angle 结束角度
# - (90,90,90) 颜色
# - -1 负数:填充,正数:线条粗细
cv2.ellipse(img, (400,400), (150, 100), 0, 0, 300, (0, 0, 0), -1)
cv2.imshow("image", img)
cv2.waitKey(0)

2. Numpy数组操作图像之截取ROI、增加行与列

图片在python中表现为 3通道的BGR,或者4通道的 BGRA
增加行、列;

原始图如下
在这里插入图片描述

增加行列效果图(左上左下右上右下)分别为左侧增加白色像素、右侧增加白色像素、上方增加黑色像素、下方增加黑色像素 效果图
在这里插入图片描述

3. 制作透明图

3.1 效果图

在这里插入图片描述

3.2 源码

import numpy as np
import cv2
import imutils

width = 600
height = 550
# 默认生成的是白色的全透明图
img = np.ones((height, width, 4)) * (255, 255, 255, 0)
cv2.imshow("origin", img)
cv2.waitKey(0)

# 绘制圆
cX = 131.5
cY = 131.5
radius = 91.50425720214844
# - (int(cX), int(cY)) 圆心像素值
# - radius 半径
# - (0, 0, 255) 颜色
# - -1 负数:填充,正数:线条粗细
cv2.circle(img, (int(cX), int(cY)), int(radius), (0, 0, 255), -1)

# 绘制文字
# - img 图片
# - "Good job" 文字内容
# - (int(cX - 10), int(cY)) 绘制起始的像素
# - cv2.FONT_HERSHEY_SIMPLEX
# - 0.45 基于字体特定基大小的比例因子
# - (0, 255, 0) 颜色
# - 2 绘制文本的线条粗细
cv2.putText(img, "Good job", (300, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 5)

# 绘制矩形
# - img 图片
# - (int(cX),int(cY)) 矩形左上起始点坐标,必须为正数
# - (int(cX) + w, int(cY) + h) 右下角终点
# - (255, 0, 0)
# - 2 正数:线条粗细,负数:填充
w = 60
h = 30
cv2.rectangle(img, (250, 250), (250 + w, 250 + h), (255, 0, 0), 3)

# 绘制正方形(同矩形,宽度、高度一致)
w = 80
h = 80
cv2.rectangle(img, (100, 300), (100 + w, 300 + h), (0, 255, 255), -1)

# 绘制椭圆
# - img 图像
# - (int(cX), int(cY)) 中心
# - (150,100) 长轴,短轴
# - angle 角度
# - start_angle 开始角度
# - end_angle 结束角度
# - (90,90,90) 颜色
# - -1 负数:填充,正数:线条粗细
cv2.ellipse(img, (400, 400), (150, 100), 0, 0, 300, (0, 0, 0), -1)
cv2.imshow("image", img)
cv2.waitKey(0)

# 保留宽高比的缩放原图为宽度400
img = imutils.resize(img, width=400)

# 有像素的地方设置不透明
b, g, r, a = cv2.split(img)
for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if not (b[i][j] > 0 and g[i][j] > 0 and r[i][j] > 0):
            a[i][j] = 255  # 255不透明,0全透明,有像素的地方设置不透明
image = cv2.merge((b, g, r, a))

cv2.imwrite("./images/res.png", image)
cv2.destroyAllWindows()

4. 使用Python,OpenCV制作全透明的logo水印,对图像添加水印

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值