OpenCV提供了方便的绘图功能,可以绘制直线,矩阵,圆,椭圆等多种几何图形,还能再指定位置添加文字说明。
1. 绘制直线:
img = v2.line(img, pt1, pt2, color [, thickness [, lineType]])
返回值, img: 绘制出的图像。
参数:
img: 在其上绘制直线的载体图像(绘图的容器载体,也成为画布,画板)
pt1,pt2: 线段的起点和终点。类型为tuple.
color:绘制直线的颜色。通常使用BGR模型表示。 例如:(0, 0, 255)表示红色。
thickness:线条的粗细。默认为1. 值越大越粗。
lineType: 线条类型。默认为8连接类型。
import cv2 import sys img_src = cv2.imread("images/sample_1.webp") if(img_src is None): print("Read file error.") sys.exit() print("Image Shape:", img_src.shape) width = img_src.shape[1] height = img_src.shape[0] img_des = cv2.line(img_src, (0, 0), (width, height), (0, 0, 255), 3, cv2.LINE_AA) cv2.imshow("Orz", img_src) cv2.imshow("After", img_des) cv2.waitKey() cv2.destroyAllWindows()
2. 绘制矩形:
img = cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType]])
参数:
img: 在其上绘制矩形的载体图像(绘图的容器载体,也成为画布,画板)
pt1,pt2: 矩形的顶点和其对角的顶点。类型为tuple.
color:绘制矩形的颜色。通常使用BGR模型表示。 例如:(0, 0, 255)表示红色。
thickness:线条的粗细。若为 -1. 表示绘制的是实心图形。
lineType: 线条类型。默认为8连接类型。
import cv2 import sys img_src = cv2.imread("images/sample_1.webp") if(img_src is None): print("Read file error.") sys.exit() print("Image Shape:", img_src.shape) line_src = img_src.copy() rect_src = img_src.copy() rect_src2 = img_src.copy() width = img_src.shape[1] height = img_src.shape[0] img_des = cv2.line(line_src, (0, 0), (width, height), (0, 0, 255), 3, cv2.LINE_AA) cv2.rectangle(rect_src, (0, 0), (int(width/2), int(height/2)), (0,255, 0), 1, cv2.LINE_4) cv2.rectangle(rect_src2, (int(width/2), int(height/2)), (width-1, height-1),(255,0, 0), -1) #实心填充。 cv2.imshow("Orz", img_src) cv2.imshow("line", line_src) cv2.imshow("rect", rect_src) cv2.imshow("rect2", rect_src2) cv2.waitKey() cv2.destroyAllWindows()
画rectangle时,分别用空心的和实心的方式。
3. 绘制圆:
img = cv2.circle(img, center, radius, color[, thickness [,lineType]])
center:圆心。
radius:半径。
color:绘制矩形的颜色。通常使用BGR模型表示。 例如:(0, 0, 255)表示红色。
thickness:线条的粗细。若为 -1. 表示绘制的是实心图形。
lineType: 线条类型。默认为8连接类型。
img_src = cv2.imread("images/sample_1.webp") if(img_src is None): print("Read File error.") sys.exit() width = img_src.shape[1] height = img_src.shape[0] circle1_src = img_src.copy() circle2_src = img_src.copy() red = (0, 0, 255) cv2.circle(circle1_src, (round(width/2), round(height/2)), round(width/4), red ,3) cv2.circle(circle2_src, (round(width/2), round(height/2)), round(width/4), red ,-1) #实心圆 cv2.imshow("Orz", img_src) cv2.imshow("circle1", circle1_src) cv2.imshow("circle2", circle2_src)
4. 绘制椭圆:
img = cv2.ellipse()
5. 绘制多边形:
img = cv2.polylines()
6.绘制文字:
img = cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[,lineType[, bottomLeftOrigin]]])
参数:
img: 在其上绘制矩形的载体图像(绘图的容器载体,也成为画布,画板)
text: 要绘制的文字
org:绘制文字的位置。以文字左下角为起点。
fontFace:字体类型。
fontScale:字体大小
color:绘制矩形的颜色。通常使用BGR模型表示。 例如:(0, 0, 255)表示红色。
thickness:线条的粗细。若为 -1. 表示绘制的是实心图形。
lineType: 线条类型。默认为8连接类型。
bottomLeftOrigin:文字方向,默认为False. 但设置为True,文字呈垂直镜像。
img_src = cv2.imread("images/sample_1.webp")
if(img_src is None):
print("Read File error")
sys.exit()
width = img_src.shape[1]
height = img_src.shape[0]
red = (0, 0, 255)
blue = (255, 0, 0)
cv2.putText(img_src, "Samurai", (round(width/2)-10, round(height/2)-20), cv2.FONT_HERSHEY_SIMPLEX, 1, red)
cv2.putText(img_src, "Samurai", (round(width/2)-10, round(height/2)-20), cv2.FONT_HERSHEY_SIMPLEX, 1, blue, bottomLeftOrigin= True ) #镜像
cv2.imshow("Text", img_src)
cv2.waitKey()
cv2.destroyAllWindows()