zoukankan      html  css  js  c++  java
  • openCV(二)——基础绘制函数


    1、使用其绘制不同几何图形
    - img:你想要绘制图形的那张图像;
    - color:形状的颜色,以RGB为例,需要传入一个元组,如(255,0,0)代表蓝色,灰度图只需要传入灰度值;
    - thickness: 线条的粗细,给一个闭合图形设置-1,则图形会被填充,默认为1;
    - linetype: 线条的类型,8连接,抗锯齿等,默认是8连接,cv2.LINE_AA为抗锯齿,这样看起来很平滑
      

    函数:
    - cv2.line(img,start,end,color,thickness)
    - cv2.rectange(img,左上角顶点,右下角顶点,color,thickness)
    - cv2.circle(img,center,radius,color[,thickness[,lineType[,shift]]])
    ·center:必选参数,圆心坐标
    ·radius:必选参数,圆形半径
    ·color:必选参数,用于设置待绘制圆形的颜色
    ·thickness:可选参数。当该参数为正数时,表示待绘制圆形轮廓的粗细;当该参数为负值时,表示待绘制圆形为实心圆,即填充的圆形
    ·lineType:可选参数。用于设置线段的类型,可选8(8邻接连接线-默认)、4(4邻接连接线)和cv2.LINE_AA 为抗锯齿
      
     1 import numpy as np
     2 import cv2
     3 # np.zeros((shape), ddtype = np.int32) : 生成int32型的全0
     4 img=np.zeros((512,512,3),np.uint8)          # 创建一个512*512的空彩色的图像,(512,512)则是空灰度的图像
     5 cv2.line(img,(0,0),(511,511),(255,0,0),5)   # 直线绘制:换一条5px的蓝色线,需要高值线的起点和终点
     6 cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)    # 矩形绘制:须知左上角顶点和右下角顶点的坐标,这次在右上角画个绿色的矩形
     7 cv2.circle(img,(447,63),63,(0,0,255),-1)       # 圆形绘制:在矩形中画个院,指定圆形的中心坐标和半径大小
     8 cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)  # 椭圆绘制:第一个参数时中心点的位置坐标,参数二是长轴和短轴的长度,椭圆延逆时针方向旋转角度,线型-1表示填充
     9 # 绘制多边形:若第三个参数是false,得到的多边形是不必和的(首位不相连),cv2.polylines()可以用来画很多条线,只需要把想要的线放在一个列表中,将列表传给函数就可以了,每条线都会被独立绘制
    10 pts=np.array([[10,5],[20,30],[70,20],[50,10]],np.int32) # 需要指定每个顶点的坐标,用这些坐标后见一个大小等于行数x1 x2的数组,行数就是点的数,数组的数据类型必须是int32,
    11 pts=pts.reshape((-1,1,2))                   # 第一个参数-1表示这一维的长度是根据后面的维度的计算出来的
    12 # 图片中添加文字,参数:文字,位置,字体类型(cv2.putText()文档可找到支持的字体),字体的一般属性(颜色,粗细等)
    13 font=cv2.FONT_HERSHEY_SIMPLEX
    14 cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2)
    15 # 显示出来
    16 winname='emample'
    17 cv2.namedWindow(winname)
    18 cv2.imshow(winname,img)
    19 cv2.waitKey(0)
    20 cv2.destroyAllWindows()   

      

     圆的练习:绘制奥运五环

     1 import numpy as np
     2 import cv2
     3 img=np.zeros((900,900,3),np.uint8)
     4 # 将np.zeros()绘制的图像给背景色,默认是黑色,即BGR(0,0,0)
     5 img[:,:,0]=np.zeros([900,900])+255
     6 img[:,:,1]=np.zeros([900,900])+254
     7 img[:,:,2]=np.zeros([900,900])+255
     8 # openCV中颜色赋值是BGR
     9 cv2.circle(img,(130,200),50,(255,0,0),5,cv2.LINE_AA)
    10 cv2.circle(img,(250,200),50,(0,0,0),5,cv2.LINE_AA)
    11 cv2.circle(img,(370,200),50,(0,0,255),5,cv2.LINE_AA)
    12 cv2.circle(img,(190,250),50,(0,255,255),5,cv2.LINE_AA)
    13 cv2.circle(img,(310,255),50,(50,205,50),5,cv2.LINE_AA)
    14 cv2.namedWindow('image',cv2.WINDOW_NORMAL)
    15 cv2.imshow('image',img)
    16 cv2.waitKey(0)
    17 cv2.destroyAllWindows()

    练习:绘制openCV 的logo
     1 import numpy as np
     2 import cv2
     3 img = np.zeros((512, 512, 3), np.uint8)
     4 # 上-外圆-红色填充
     5 img = cv2.circle(img, (256, 176), 40, (0, 0, 255), -1)
     6 # 上-内圆-黑色填充
     7 img = cv2.circle(img, (256, 176), 16, (0, 0, 0), -1)
     8 # 左下-外圆-绿色填充
     9 img = cv2.circle(img, (210, 256), 40, (0, 255, 0), -1)
    10 # 左下-内圆-黑色填充
    11 img = cv2.circle(img, (210, 256), 16, (0, 0, 0), -1)
    12 # 右下-外圆-蓝色填充
    13 img = cv2.circle(img, (302, 256), 40, (255, 0, 0), -1)
    14 # 右下-内圆-黑色填充
    15 img = cv2.circle(img, (302, 256), 16, (0, 0, 0), -1)
    16 # 用一个四角的多边形来填充覆盖
    17 pts = np.array([[256, 176], [210, 256], [250, 256], [276, 210]], np.int32)
    18 pts = pts.reshape((-1, 1, 2))
    19 img = cv2.fillPoly(img, [pts], (0, 0, 0))
    20 # 第2个覆盖,使用三角形
    21 pts2 = np.array([[276, 210], [302, 256], [322, 210]], np.int32)
    22 pts2 = pts2.reshape((-1, 1, 2))
    23 img = cv2.fillPoly(img, [pts2], (0, 0, 0))
    24 cv2.imshow('draw exercise', img)
    25 cv2.waitKey()
    26 cv2.destroyAllWindows()
     1 # 绘制openCV图标
     2 import contours as contours
     3 import numpy as np
     4 import cv2
     5 import shapely
     6 img=np.zeros((500,500,3),np.uint8)
     7 cv2.circle(img,(250,125),50,(240,255,0),30,cv2.LINE_AA)
     8 cv2.circle(img,(170,250),50,(250,0,250),30,cv2.LINE_AA)
     9 cv2.circle(img,(330,250),50,(0,240,240),30,cv2.LINE_AA)
    10 pts=np.array([[250,125],[170,250],[250,250],[290,180]],np.int32)
    11 cv2.polylines(img,[pts],True,(0,0,0))
    12 # 填充闭合多边形
    13 # cv2.fillConvexPoly()函数,只能用于填充凸多边形,只需要提供各个顶点即可
    14 # cv2.fillPoly()函数,用于填充任意形状的图形,可以用于绘制多边形,也可以使用非常多的边近似的画一条曲线,该函数可以一次填充多个图形。点构成的边界,要加中括号
    15 cv2.fillConvexPoly(img,pts,(0,0,0))    
    16 pts1=np.array([[290,180],[330,250],[370,180]],np.int32)
    17 cv2.polylines(img,[pts1],True,(0,0,0))
    18 cv2.fillConvexPoly(img,pts1,(0,0,0))
    19 font=cv2.FONT_HERSHEY_SIMPLEX
    20 cv2.putText(img,'OpenCV',(130,400),font,2,(255,255,255),5)
    21 cv2.namedWindow('image')
    22 cv2.imshow('image',img)
    23 cv2.waitKey(0)
    24 cv2.destroyAllWindows()
  • 相关阅读:
    力扣236题、235(二叉树最近公共祖先)
    力扣222题(完全二叉树的节点个数)
    力扣130题、990题(并查集算法)
    力扣855题(考场就座)
    力扣659题(分割数组为连续子数组)
    力扣435题(区间调度问题)
    【转】编程之:EXPORT_SYMBOL使用
    【转】shell工具之:常用shell脚本命令详细
    【转】vim工具命令之:添加行号和删除行号
    BUG之【虚拟机报错】:Centos出现 rm: cannot remove x: Read-only file system 的总结
  • 原文地址:https://www.cnblogs.com/Free-Ink/p/12841915.html
Copyright © 2011-2022 走看看