美文网首页python编程IT大杂烩
opencv 绘制不同图形并添加文字

opencv 绘制不同图形并添加文字

作者: 刑素素 | 来源:发表于2016-09-24 19:10 被阅读4998次
    • 目标

    1. 在图片上或者背景图上面绘制直线,矩形区域,圆形,椭圆或不规则图形并且添加文字。
    2. 上述对应的绘图函数的使用。
    • 示例代码

    python  
    # -*- coding:utf-8- *-
      
    import numpy as np
    import cv2
      
    img = np.zeros((512,512,3), np.uint8)
    cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
    cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 5)
    cv2.circle(img, (447, 63), 50, (0, 0, 255),-1)
    cv2.ellipse(img, (256, 256), (100, 50), 90, 0,360, (0, 255, 0), -1)                              
      
    pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10], [50, 30], [70, 70]], np.int32)
    pts = pts.reshape((-1,1,2))
    cv2.polylines(img, [pts], False,(255, 255, 0),1)
      
    font = cv2.FONT_HERSHEY_TRIPLEX
    cv2.putText(img, 'opencv', (10, 500), font, 4, (255, 255, 0), 1, False)  
      
    cv2.imshow('example', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()      
      
    
    • 画线段

    cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
    画线条,起点和终点分别是(0, 0),(511, 511),线条颜色为 (255, 0, 0),5像素粗细。

    • 画矩形

    cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 5)
    画矩形,起点和终点分别为(384, 0), (510, 128),矩形颜色为 (0, 255, 0),5像素粗细。

    • 画圆形

    cv2.circle(img, (447, 63), 50, (0, 0, 255),-1)
    画圆形,圆点坐标是(447, 63),半径为50像素,颜色为(0, 0, 255),-1表示圆内部将被用(0, 0, 255)色值填充。

    • 画椭圆

    cv2.ellipse(img, (256, 256), (100, 50), 90, 0,360, (0, 255, 0), -1)
    画椭圆,中心点坐标为(256, 256),长轴和短轴的长度分别为100和 50像素,椭圆选转的角度为90度,开始到结束的角度分别为0,360,说明是整个椭圆,如果是0,180度,说明是半个椭圆,椭圆形的颜色为(0, 255, 0)并且填充整个椭圆。

    • 画不规则图形

    pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10], [50, 30], [70, 70]], np.int32)
    pts = pts.reshape((-1,1,2))
    cv2.polylines(img, [pts], False,(255, 255, 0),1)
    画不规则图形,首先定义不规则图形每个定点的坐标,6个顶点的坐标分别为[[10, 5], [20, 30], [70, 20], [50, 10], [50, 30], [70, 70];
    reshape()函数创建一个改变尺寸的新数组,-1表示这一维的长度是根据后面的数组的维度计算出来的。reshape((-1,1,2))表示数组的维度是一行二列的新数组。其实这里可以不用reshape()函数,本来就是用的一行二列的数组表示每个点的坐标。
    最后用画多条线的函数polylines()连接各个定点,得到不规则图形,[pts]表示各个点的数组,True表示不规则图形是首尾相连闭合的,如果设为False,则图形不会闭合,(255, 255, 0)表示线段的颜色,粗细为1像素。

    • 写文字

    font = cv2.FONT_HERSHEY_TRIPLEX
    cv2.putText(img, 'opencv' , (10, 500), font, 4, (255, 255, 0), 1,False)
    添加文字,定义字体,然后写入文字,这里写入文字为'opencv',写入文字的开始位置为(10, 500),字体大小为4像素,字体颜色为 (255, 255, 0),字体粗细为6像素,最后的布尔值不知道有什么用,文档上是这样写的:
    bottomLeftOrigin – When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner.
    由于OpenCV原生函数putText是不支持中文字体,所以这里无法写入中文。
    关于文字字体名称标识符,参见 Hershey 字体集 ,可供字体类型如下:
    FONT_HERSHEY_SIMPLEX 正常大小无衬线字体
    FONT_HERSHEY_PLAIN 小号无衬线字体
    FONT_HERSHEY_DUPLEX 正常大小无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂
    FONT_HERSHEY_COMPLEX 正常大小有衬线字体
    FONT_HERSHEY_TRIPLEX 正常大小有衬线字体,比FONT_HERSHEY_COMPLEX更复杂
    FONT_HERSHEY_COMPLEX_SMALLFONT_HERSHEY_COMPLEX
    FONT_HERSHEY_SCRIPT_SIMPLEX 手写风格字体
    FONT_HERSHEY_SCRIPT_COMPLEXFONT_HERSHEY_SCRIPT_SIMPLEX 更复杂
    以上只是针对sanserif字体进行的设置。

    • 效果图

    效果图

    相关文章

      网友评论

        本文标题:opencv 绘制不同图形并添加文字

        本文链接:https://www.haomeiwen.com/subject/wxvxyttx.html