Python OpenCV中如何进行图形绘制

Python OpenCV中如何进行图形绘制

这篇文章将为大家详细讲解有关PythonOpenCV中如何进行图形绘制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

背景

使用OpenCV进行图形绘制是一种必备的技能,在图像的任务中,不管是图像检测还是图像识别,我们都需要通过绘制图形和绘制文字对处理的结果进行说明,本篇就详细介绍下图形的绘制;

一、画线

line(图像,起始点,终点,颜色,线宽,线形):一般只需要前面四个参数即可;

代码案例:

cv2.line(img,(20,100),(20,500),(0,0,255))

画出了一条Y方向上的红色线段;

二、画矩形

这个相对来说是应用最多的一种方法了,往往在检测项目中返回目标的结果就是(x,y,w,h)或者(x1,y1,x2,y2)这两种形式,当然我们这里绘制需要的是第二种形式,而通过左上角点计算右下角也是很简单的;

cv2.rectangle(img,(x1,y1),(x2,y2),(0,0,255),3)#后面两个参数为颜色和线长

简单展示一下我用DeepFashion数据画出矩形框的效果:

三、画圆

画圆在应用的其实并不多,更多的是画点的操作,例如关键点的任务,需要将关键点在目标图像上显示出来;而实际上点就是一个实心圆,这里就介绍画圆和画点的两种形式吧。

#函数cv2.circle(img,(x,y),半径长度,(0,0,255),-1)//画一个实心圆(点),最后参数设置为负数cv2.circle(img,(x,y),半径长度,(0,0,255),4)//画一个空心圆

下面还是展示我画出关键点的一个效果:

四、画多边形

绘制多边形在实际应用中也很常见,例如分割以及OCR的任务,往往需要用多个点描述出目标的轮廓。

函数原型如下:

polylines(img,点集,是否闭环,颜色…),注意这里的点集必须是32位的

案例代码:

pot=np.array([(100,100),(200,200),(300,400)],np.int32)cv2.polylines(img,[pot],True,(0,0,255))#如果输出填充的多边形,用以下apicv2.fillPoly(img,[pot],(0,0,255))

五、画文本

绘制文本在实际项目中,往往用来标记类别,对于一些结果输出,可以通过文本的方式绘制到图像上,便于观察结果和验证;

函数原型:

putText(img,字符串,起始点,字体,字号…)

案例代码:

cv2.putText(img,"HelloWorld",(100,100),字体,3,(0,0,255))

六、鼠标绘制

实现功能:

可通过鼠标进行基本图形的绘制:按下l画线,按下r画矩形,按下c画圆;

importcv2importnumpyasnpstar=(0,0)select=0img=np.zeros((480,640,3),np.uint8)//定义鼠标回调函数defmouse_callback(event,x,y,flags,userdata):globalstar,selectif(event&cv2.EVENT_LBUTTONDOWN==cv2.EVENT_LBUTTONDOWN):star=(x,y)elif(event&cv2.EVENT_LBUTTONUP==cv2.EVENT_LBUTTONUP):ifselect==0:cv2.line(img,star,(x,y),(0,0,255))elifselect==1:cv2.rectangle(img,star,(x,y),(0,0,255))elifselect==2:a=(x-star[0])b=(y-star[1])r=int((a**2+b**2)**0.5)cv2.circle(img,star,r,(0,0,255))else:print('noshape')cv2.namedWindow('drawshape',cv2.WINDOW_NORMAL)cv2.setMouseCallback('drawshape',mouse_callback,"111")whileTrue:cv2.imshow('drawshape',img)key=cv2.waitKey(1)&0xFFifkey==ord('q'):breakelifkey==ord('l'):select=0elifkey==ord('r'):select=1elifkey==ord('c'):select=2

下图是我自己随意画的结果,大家可以创造出更有趣的图画;

关于PythonOpenCV中如何进行图形绘制就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2022-01-06 23:31:33
收藏
分享
海报
0 条评论
31
上一篇:.Net Core Ocelot超时、熔断、限流的概念是什么 下一篇:SpringMVC对Restful风格的支持是怎样的
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码