图片的读写与展示;(默认opencv读出来是 3通道的BGR图;透明图实质上是 BGRA的4通道图 )
图片的旋转、无损旋转
图片的放大、缩小、保留宽高比的放大缩小
绘制圆、文字、矩形、正方形、椭圆
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)
图片在python中表现为 3通道的BGR,或者4通道的 BGRA
增加行、列;
增加行列效果图(左上左下右上右下)分别为:左侧增加白色像素、右侧增加白色像素、上方增加黑色像素、下方增加黑色像素 效果图
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()