Day2: Numpy读取修改像素值、绘制几何图形
01 Numpy读取、修改像素值
import cv2
import numpy
figure = cv2.imread('image.png', cv2.IMREAD_UNCHANGED)
# numpy读取像素值
r, b, g = figure.item(50, 60, 0), figure.item(50, 60, 1), figure.item(50, 60, 2)
print([r, b, g])
# numpy修改像素值
figure.itemset((50, 60, 0), 100)
figure.itemset((50, 60, 1), 100)
figure.itemset((50, 60, 2), 100)
print(figure[50, 60])
输出:
02 绘制几何图形
①画直线:cv2.line()
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用cv2.line()话画直线,参数分别为:图像对象、第一个点坐标、第二个点坐标、颜色、粗细
cv2.line(figure, (0, 0), (255, 255), (100, 50, 150), 3)
# 显示图像
cv2.imshow('line', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
用循环画出多条线:
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用循环画出多条直线
i = 0
while i < 256:
cv2.line(figure, (0, 2*i), (255, 255 - 2*i), (100, 50, 150), 2)
i += 5
# 显示图像
cv2.imshow('line', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
②画矩形:cv2.rectangle()
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用cv2.rectangle()画矩形,参数分别为:图像对象、左上角点坐标、右下角点坐标、颜色、粗细
cv2.rectangle(figure, (50, 200), (150, 80), (100, 200, 50), 3)
# 显示图像
cv2.imshow('rectangle', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
如果把粗细设置为-1,则为实心矩形:
③画圆:cv2.circle()
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用cv2.circle()画矩形,参数分别为:图像对象、圆心、半径、颜色、粗细
cv2.circle(figure, (100, 100), 80, (200, 100, 50), 3)
# 显示图像
cv2.imshow('circle', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
如果将粗细设置为-1,则为实心圆:
④画椭圆:cv2.ellipse()
同理,将粗细设置为-1,也可以画出实心椭圆。
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用cv2.ellipse()画椭圆,参数分别为:图像对象、椭圆中心、长轴短轴、顺时针旋转角度、起始角度(顺)、终止角度(顺)、颜色、粗细
cv2.ellipse(figure, (120, 120), (100, 40), 30, 0, 330, (200, 200, 0), 3)
# 显示图像
cv2.imshow('rectangle', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
⑤画多边形:cv2.polylines()
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用cv2.polylines()多边形,参数分别为:图像对象、端点阵列、是否闭合、颜色、粗细
points = np.array([[20, 10], [40, 80], [120,200], [240, 100], [100, 40]])
cv2.polylines(figure, [points], True, (50, 200, 0), 3)
# 显示图像
cv2.imshow('rectangle', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
绘制五角星:
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((512, 512, 3), np.uint8)
# 用cv2.polylines()多边形,参数分别为:图像对象、曲线阵列、是否闭合、颜色、粗细
points = np.array([[50, 190], [380, 420], [255, 50], [120, 420], [450, 190]])
cv2.polylines(figure, [points], True, (50, 200, 0), 3)
# 显示图像
cv2.imshow('rectangle', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
⑥绘制文字:cv2.putText()
import cv2
import numpy as np
# 用np.zeros()创建黑色图像,参数分别为:数组形状、数据类型
figure = np.zeros((256, 256, 3), np.uint8)
# 用cv2.polylines()绘制文字,参数分别为:图像对象、文字、字符串左下角位置、字体类型、字体大小、字体颜色、粗细
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(figure, 'this is an string', (50, 50), font, 0.7, (50, 200, 0), 2)
# 显示图像
cv2.imshow('rectangle', figure)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()