在图像中我们经常需要用到将某个局部特征画出来,比如物体检测,物体追踪等等,今天来看看有哪些好玩的绘图工具吧!
常用的绘图有:画直线、圆、矩形、字符串,在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为抗锯齿,使得线更加平滑。
加抗锯齿后,在线的边缘有一层模糊的颜色过渡线带。
3. 画圆和椭圆
矩形用的最为广泛,几乎所有的目标检测都会用到,opencv中的cv2.rectangle(src, (x0,y0),(x1,y1),color,thickness)其中需要知道左上角和右下角的坐标,如果你用习惯了(x0,y0,w,h)模式的画矩形转换也很简单。
5.画多边形
cv2.polylines(src, [points], True,color, thickness), points为点集,需要知道多边形顶点的集合
字体格式:
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()