当前位置: 代码迷 >> 综合 >> 3.绘图函数cv2.line()、cv2.circle()、cv2.rectangle()、cv2.ellipse()、cv2.putText()、cv2.polylines
  详细解决方案

3.绘图函数cv2.line()、cv2.circle()、cv2.rectangle()、cv2.ellipse()、cv2.putText()、cv2.polylines

热度:89   发布时间:2023-12-15 12:48:05.0

1. cv2.line()-画线条

它有五个参数:

  1.   img:要划的线所在的图像;
  2.   pt1:直线起点
  3.   pt2:直线终点  (坐标分别为宽、高,opencv中图像的坐标原点在左上角
  4.  color:直线的颜色
  5.  thickness=1:线条粗细,默认是1.如果一个闭合图形设置为-1,那么整个图形就会被填充。

如:cv2.line(img, (0, 0), (511, 511), (0, 0, 255), 5)

2. cv2.circle()-画圆

和cv2.line()大致相同,第2、3个参数分别代表圆的圆心坐标和半径.

如: cv2.circle(img,(447,63), 63, (0,0,255), -1)

3. cv2.rectangle()-画矩形

和cv2.line()大致相同,第2、3个参数分别代表矩阵的左上顶点和右下顶点.

如:cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

4. cv2.ellipse()-画椭圆

1.要画的椭圆所在的位置 2.椭圆中心点的坐标 3.长轴和短轴的长度 4.椭圆沿逆时针选择角度5.椭圆沿顺时针方向起始角度和结束角度 6.颜色 7.线条的粗细

如:cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

5. cv2.putText()-添加文字

参数如下: 1. 添加文字所在的图像 2.文字内容 3.坐标 4. 字体 5.大小 6. 颜色 7.粗细

如:cv2.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2)

6. cv2.polylines()-画多边形

参数如下:

  • img:要在上面画多边形的图像
  • pts:包含多边形上点的数组
  • isClosed:标志,决定所绘制的多边形是否闭合。若为 True ,则画若干个闭合多边形;若为 False ,则画一条连接所有点的折线
  • color:多边形颜色
  • thickness:多边形线的粗细
  • lineType:多边形线的类型
  • shift:坐标精确到小数点后第几位
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))  
cv.polylines(img,pts=pts,isClosed=True, color=(255, 255, 255), thickness=3)

7. 实现代码:

import cv2 as cv
import numpy as np"""
绘图函数:cv2.line(),cv2.circle(),cv2.rectangle(), cv2.ellipse(),cv2.putText() 等。
"""
def draw_demo(img):# 从cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img# 1pt1,pt2起点终点。# thickness线宽。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是 1.# :线条的类型, 8连接,抗锯齿等。默认情况是8连接。cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑cv.line(img, (0, 0), (511, 511), (0, 0, 255), 5)cv.rectangle(img,(384,0),(510,128),(0,255,0),3)cv.circle(img,(447,63), 63, (0,0,255), -1)  # 中心点,半径,颜色,填充# 椭圆一个参数是中心点的位置坐标。 下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。# 椭圆弧沿着顺时针方向起始的角度和结束角度(只画出一部分椭圆),如果是 0 到 360,就是整个椭圆。cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)# 这里 reshape 的第一个参数为 -1, 表明这一维的长度是根据后面的维度的计算出来的。# 注意:如果第三个参数是 False,我们得到的多边形是不闭合的(首尾不相 连)。# 注意:cv2.polylines() 可以被用来画很多条线。# 只需要把想要画的线放在一 个列表中,将这个列表传给函数就可以了。每条线都会被独立绘制。# 这会比用 cv2.line() 一条一条的绘制要快一些pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)pts = pts.reshape((-1, 1, 2))  # 高、宽、通道数   cv2.resize():宽、高cv.polylines(img,pts=pts,isClosed=True, color=(255, 255, 255), thickness=3)"""要在图片上绘制文字,你需要设置下列参数: ? 你要绘制的文字 ? 你要绘制的位置 ? 字体类型(通过查看 cv2.putText() 的文档找到支持的字体) ? 字体的大小 ? 文字的一般属性如颜色,粗细,线条的类型等。为了更好看一点推荐使用 linetype=cv2.LINE_AA。 警告:所有的绘图函数的返回值都是 None,所以不能使用 img = cv2.line(img,(0,0),(511,511),(255,0,0),5)。"""font = cv.FONT_HERSHEY_SIMPLEXcv.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2)cv.imshow("example", img)def main():cv.namedWindow("example")img = np.zeros((512, 512, 3), np.uint8)  # 生成对应的0矩阵.draw_demo(img)cv.waitKey(0)  # 等有键输入或者1000ms后自动将窗口消除,0表示只用键输入结束窗口cv.destroyAllWindows()  # 关闭所有窗口if __name__ == '__main__':main()

 

  相关解决方案