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()

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐