OpenCV中的绘图函数(工具)

在图像中我们经常需要用到将某个局部特征画出来,比如物体检测,物体追踪等等,今天来看看有哪些好玩的绘图工具吧!

常用的绘图有:画直线、圆、矩形、字符串,在OpenCV中分别可以用cv2.line(), cv2.circle(), cv2.rectangle(), cv2.putText()来实现,所有的绘图函数返回值均为None,不能用img=cv2.paintFunction()

1.cv2.line(src, (x0,y0),(x1,y1),color, thickness,linetype): 画线需要知道起止点的坐标, thickness即线的粗细,其中为-1时表示画闭合图形,进行内部填充,linetype可以使用默认及cv2.LINE_AA为抗锯齿,使得线更加平滑。

OpenCV中的绘图函数(工具)_第1张图片
结果:左图为原比例,右图将其放大,下方的线采用抗锯齿线型

加抗锯齿后,在线的边缘有一层模糊的颜色过渡线带。

2. 写字符串:cv2.putText(src, str, (x0,y0), font, size, color, thickness, linetype) 我们需要对图片加以注释,putText()就显得极其重要,各个参数中文意思为:绘画图像,文字,位置坐标,字体,字体大小,字体颜色,字体粗细及线型,建议线型使用cv2.LINE_AA,其中关于font, openCV支持的字体,看一下不同样式效果图(其他参数相同,仅改变字体格式,没有传递linetype,字体边缘锯齿还是比较严重),通常用第一种就够了。
OpenCV中的绘图函数(工具)_第2张图片

3. 画圆和椭圆

cv2.circle(src,(x0,x0),radius,color,thickness),需要知道圆的半径和圆心坐标,其他的参照画线,比较有意思的是画椭圆,cv2.ellipse(src,(x0,y0),(a,b),angle,start,end,color,thickness) 其中(a,b)是长轴和短轴的长度,angle是所需要旋转的角度,默认是平放,start和end是起始的角度和终止的角度,逆时针,其中椭圆的一个应用是圈定眼睛所在的位置,尝试修改这些参数就能很快理解每个参数的意思。
OpenCV中的绘图函数(工具)_第3张图片
4.画矩形

矩形用的最为广泛,几乎所有的目标检测都会用到,opencv中的cv2.rectangle(src, (x0,y0),(x1,y1),color,thickness)其中需要知道左上角和右下角的坐标,如果你用习惯了(x0,y0,w,h)模式的画矩形转换也很简单。

5.画多边形

cv2.polylines(src, [points], True,color, thickness), points为点集,需要知道多边形顶点的集合

OpenCV中的绘图函数(工具)_第4张图片
分别采用rectangle()和polylines()来画矩形
附上部分代码:

字体格式:

font=(cv2.FONT_HERSHEY_SIMPLEX,cv2.FONT_HERSHEY_PLAIN,cv2.FONT_HERSHEY_DUPLEX,\
     cv2.FONT_HERSHEY_COMPLEX,cv2.FONT_HERSHEY_TRIPLEX,cv2.FONT_HERSHEY_COMPLEX_SMALL,\
     cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,cv2.FONT_HERSHEY_SCRIPT_COMPLEX,cv2.FONT_ITALIC)
str=('FONT_HERSHEY_SIMPLEX','FONT_HERSHEY_PLAIN','FONT_HERSHEY_DUPLEX',\
    'FONT_HERSHEY_COMPLEX','FONT_HERSHEY_TRIPLEX','FONT_HERSHEY_COMPLEX_SMALL',\
    'FONT_HERSHEY_SCRIPT_SIMPLEX','FONT_HERSHEY_SCRIPT_COMPLEX','FONT_ITALIC')

#画线
#创建一张图片,底色为纯白
img=255*np.ones((640,500,3),np.uint8)#img[0]为高度,img[1]为宽度
cv2.line(img,(81,211),(419,549),(0,0,0),10)
cv2.line(img,(0,300),(512,300),(255,0,0),60,cv2.LINE_AA)

#字符串
#字符串
for i in range(len(font)):
    cv2.putText(img,str[i],(0,30*(i+1)),font[i],0.9,(0,0,255),3)
#画椭圆
cv2.ellipse(img,(375,120),(100,40),145,0,360,(0,255,255),5)
cv2.ellipse(img,(375,120),(98,36),145,0,360,(0,255,0),-1)
#画圆
cv2.circle(img,(250,380),240,(255,0,0),5)
cv2.circle(img,(250,380),236,(0,0,255),-1)
cv2.line(img,(81,211),(419,549),(0,0,0),10)
cv2.putText(img,'I love OpenCV',(50,400),font[0],0.9,(0,0,0),3)
cv2.imwrite('circleAndEllipse.jpg',img)
#画矩形和多边形
img=255*np.ones((240,240,3),np.uint8)
cv2.rectangle(img,(20,20),(20+200,20+200),(255,255,0),2)
Pts = np.array([[120,20],[220,120],[120,220],[20,120]], np.int32)
Pts=Pts.reshape((-1,1,2))
cv2.polylines(img,[Pts],True,(0,0,0),2)
cv2.imwrite('rectAndPolylines.jpg',img)
#显示图像
cv2.imshow('rectangle',img)
cv2.waitKey(0)
cv2.destroyAllWindows()





你可能感兴趣的:(计算机视觉)