06_OpenCV--图像上绘画

1. 画图

用 OpenCV 画不同的几何图形

你要学习这些函数:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText() 等。

Code
上面的这些函数,你能看到一些相同的参数:

img:你想画的图片

color:形状的颜色,如 BGR,它是一个元组,例如:蓝色(255,0,0)。对于灰度图,只需传一个标量值。

thickness: 线或圆等的厚度。如果传 -1 就是像圆的闭合图形,它将填充形状。 默认 thickness = 1

lineType:线条类型,如 8 连接,抗锯齿线等。默认情况下,它是 8 连接。cv.LINE_AA 画出抗锯齿线,非常好看的曲线。

1.1. 画线

去画一条线,你需要传递线条的开始和结束的坐标。我们将创建一个黑色图像,并在坐上角到右下角画一条蓝色的线

import numpy as np
import cv2 as cv
# 创建一个黑色的图像
img = np.zeros((512,512,3), np.uint8)

# 画一条从点1(0,0)到点2(511,511)的 5px 宽的蓝色对角线
img=cv.line(img,pt1=(0,0),pt2(511,511),color=(255,0,0),thickness=5)

type(img)
>>> np.array

1.2. 画矩形

画一个矩形,你需要矩形的左上角和右下角。这次我们将会在图像的右上角画一个绿色的矩形。

img=cv.rectangle(img,pt1=(384,0),pt2=(510,128),color=(0,255,0),thickness=3)

# pt1 为矩形左上角
# pt2 为矩形右下角

1.3. 画圆

画一个圆,你需要它的圆心和半径。我们将在上面绘制的矩形上画一个内圆。

cv.circle(img,center=(447,63), radius=63, color=(0,0,255), -1)

# center 圆心
# radius 半径

1.4. 画椭圆

画一个椭圆,你需要传好几个参数。一个参数是圆心位置 (x,y)。下个参数是轴的长度 (长轴长度,短轴长度)。角度是椭圆在你逆时针方向的旋转角度。startAngle 和 endAngle 表示从长轴顺时针方向测量的椭圆弧的起点和终点。如整圆就传 0 和 360。更多细节请看 cv.ellipse() 的文档。下面是在这个图像中间画的一个半椭圆例子。

cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

1.5. 画多边形

画多边形,首先你需要顶点的做坐标。将这些点组成一个形状为 ROWSx1x2 的数组,ROWS 是顶点数,它应该是 int32 类型。这里我们绘制一个顶点是黄色的小多边形。

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
img= cv.polylines(img,pts=[pts],isClosed=True,color=(0,255,255))


isClosed :是否返回闭合形状

cv.polylines() 能画很多线条。只需创建你想绘制所有线条的列表,然后将其传给这个函数。所有线条都将单独绘制。绘制一组线条比调用 cv.line() 好很多,快很多。

2. 给图像加文字

在图像上加文字,你需要指定以下内容:

  1. 你想写的文字数据text
  2. 你想写的位置坐标 pt1 (如 左上角开始)。
  3. 字体类型 (支持的字体,查看 cv.putText() 文档)
  4. 常规的如颜色,粗细,线型等。为了更好看,线型使用 lintType = cv.LINE_AA
img=cv.putText(img, text="哈哈哈", org, fontFace, fontScale, color)

org: 文本字符串左上角坐标
img=cv2.putText(img, str(i), (123,456), font, 2, (0,255,0), 3)

3. 鼠标画图


如果你觉得这篇文章对你有帮助,不妨请我喝杯咖啡,鼓励我创造更多!