这篇文章主要介绍如何使用python和opencv实现一些简单的图形操作。
一、绘制图形:
第一部分主要介绍如何在一张空白图片中绘制各种图形,比如 线、矩形、圆形及多边形。
让我们从代码开始,然后讲每一个函数的参数含义。
-
绘制线段 cv.line(picture, (10, 10), (200, 200), (255, 255, 0), 1, cv.LINE_8, 0)
参数1:画线的目标图片,就是在哪张图片上绘制线段
参数2-3:画线的起点坐标和终点坐标
参数4:线段的颜色三个数字的意思是BGR
参数5:线段粗细(1 2 3三种程度) -
绘制矩形 cv.rectangle(picture, (100, 100), (400, 400), (0, 255, 0), 3, cv.LINE_8, 0)
参数1:绘制矩形的目标图片
参数2-3:矩形的两个对角点
参数4:矩形颜色
参数5:矩形边框粗细(-1为填充整个矩形) -
绘制圆形 cv.circle(picture, (250, 250), 150, (0, 0, 255), -1, cv.LINE_8, 0)
参数1:绘制圆形的目标图片
参数2:原点坐标
参数3:半径
参数4:圆形边框颜色
参数5:边框粗细(-1为填充整个圆形) -
写字 cv.putText(picture0, “line”, (50, 50), cv.FONT_HERSHEY_PLAIN, 4, (0, 0, 255), 1, cv.LINE_8)
参数1:放置文本的目标图片
参数2:要显示的文本
参数3:放置文本的起点坐标
参数4:
参数5:文本字体
参数6:文本颜色
参数7:文本粗细
具体代码:
import cv2 as cv
import numpy as np
# 创建三个像素400*400 3通道的空数组
picture0 = np.zeros([400, 400, 3], dtype=np.uint8)
picture1 = np.zeros([400, 400, 3], dtype=np.uint8)
picture2 = np.zeros([400, 400, 3], dtype=np.uint8)
# 在picture0绘制三根线段,粗细颜色各不同
cv.line(picture0, (100, 80), (100, 380), (255, 255, 0), 1, cv.LINE_8, 0)
cv.line(picture0, (200, 80), (200, 380), (255, 0, 255), 2, cv.LINE_8, 0)
cv.line(picture0, (300, 80), (300, 380), (0, 255, 255), 3, cv.LINE_8, 0)
cv.putText(picture0, "line", (50, 50), cv.FONT_HERSHEY_PLAIN, 4, (0, 0, 255), 1, cv.LINE_8)
# 在picture1绘制三个矩形,最后一个边框颜色设置-1填充矩形
cv.rectangle(picture1, (50, 80), (150, 250), (0, 255, 0), 1, cv.LINE_8, 0)
cv.rectangle(picture1, (250, 80), (350, 250), (0, 255, 0), 3, cv.LINE_8, 0)
cv.rectangle(picture1, (50, 280), (250, 380), (0, 255, 0), -1, cv.LINE_8, 0)
cv.putText(picture1, "rectangle", (50, 50), cv.FONT_HERSHEY_PLAIN, 4, (0, 0, 255), 2, cv.LINE_8)
# 在picture2绘制四个圆形
cv.circle(picture2, (100, 100), 40, (0, 0, 255), 1, cv.LINE_8, 0)
cv.circle(picture2, (300, 100), 40, (0, 255, 0), 2, cv.LINE_8, 0)
cv.circle(picture2, (100, 300), 40, (255, 0, 0), 3, cv.LINE_8, 0)
cv.circle(picture2, (300, 300), 40, (255, 255, 255), -1, cv.LINE_8, 0)
cv.putText(picture2, "circle", (50, 200), cv.FONT_HERSHEY_PLAIN, 4, (0, 0, 255), 3, cv.LINE_8)
cv.imshow("line", picture0)
cv.imshow("rectangle", picture1)
cv.imshow("circle", picture2)
cv.waitKey(0)
cv.destroyAllWindows()
结果展示:
本文作为自学路上的笔记使用,有错误还请各位大佬指正[抱拳]。