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

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

    • 1. [基本的图片操作方法](https://blog.csdn.net/qq_40985985/article/details/110951435)
      • 1.1 效果图
      • 1.2 源码
    • 2. [Numpy数组操作图像之截取ROI、增加行与列](https://blog.csdn.net/qq_40985985/article/details/110951435)
    • 3. 制作透明图
      • 3.1 效果图
      • 3.2 源码
    • 4. [使用Python,OpenCV制作全透明的logo水印,对图像添加水印](https://blog.csdn.net/qq_40985985/article/details/106213908)

1. 基本的图片操作方法

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

1.1 效果图

Python,OpenCV制作全透明图,简单的图片_第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
增加行、列;

原始图如下
Python,OpenCV制作全透明图,简单的图片_第2张图片

增加行列效果图(左上左下右上右下)分别为左侧增加白色像素、右侧增加白色像素、上方增加黑色像素、下方增加黑色像素 效果图
Python,OpenCV制作全透明图,简单的图片_第3张图片

3. 制作透明图

3.1 效果图

Python,OpenCV制作全透明图,简单的图片_第4张图片

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水印,对图像添加水印

你可能感兴趣的:(Python,OpenCV,图像处理,gltf,制作透明图,numpy操作,图像读取写入旋转缩放,png读取写入)