​OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库。 不管你是做科学研究,还是商业应用,opencv都能够作为你理想的工具,它可以运行在Linux、Windows、Android和Mac OS操作系统上。OpenCV轻量级而且高效,它是由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv绘图函数主要有cv2.line()画线函数,cv2.circle()画圆函数, cv2.rectangle()长方形函数,cv2.ellipse()椭圆函数, cv2.putText()文字绘制函数及鼠标交互图像绘制。

本文中编程语言使用python,用到的包为opencv-python,在终端安装命令为:

pip install opencv-python
或者
pip install opencv-contrib-python

1、画直线

画线函数是cv2.line(),需传入的参数是背景(图像),起点坐标,终点坐标,线条颜色和线条宽度五个参数。

#导入包import cv2import numpy as np#创建一个图像,300×400大小,数据类型无符号8位img=np.zeros((500,500,3),np.uint8)cv2.line(img,(50,50),(100,400),(0,255,0),3)#绿色,3个像素宽度#创建窗口,显示结果cv2.namedWindow("image")cv2.imshow('image', img)cv2.waitKey (2000) # 显示 20000 ms 即 2s 后消失,改为0即手动关闭cv2.destroyAllWindows()

效果图如下所示:

图1

2、画圆

cv2.circle(img,center = (width // 2, height // 2) , radius = int(min(height, width) / 3) , color = 0, thickness = -1)

画圆函需要传入5个参数分别为背景图像,圆心,半径,圆的颜色和线宽,当thickness=-1时,将圆填满。

#导入包
import cv2
import numpy as np
#创建一个图像,300×400大小,数据类型无符号8位
img = cv2.imread(r'D:/test.jpg',cv2.IMREAD_UNCHANGED)
height, width = img.shape[:2]
height = int(height)
width = int(width)
circleIn = cv2.circle(img,center = (width // 2, height // 2) , radius = int(min(height, width) / 3) , color = 0, thickness = 2)
cv2.imwrite(r'D:/test_out2.jpg',circleIn)
#创建窗口,显示结果
cv2.namedWindow("image")
cv2.imshow('image', img)
cv2.waitKey (0)
cv2.destroyAllWindows()

当函数的参数thickness=-1thickness=正数时,

效果图分别如下图2和图3:

图2

图3

3、画矩形

矩形函数为cv2.rectangle(),需要传入四个参数,分别为左上顶点和右下顶点,颜色,线条宽度。

#导入包import cv2import numpy as np#创建一个图像,300×400大小,数据类型无符号8位img = cv2.imread(r'D:/test.jpg',cv2.IMREAD_UNCHANGED)height, width = img.shape[:2]height = int(height)width = int(width)img2 = cv2.rectangle(img,(100,100),(300,180),(134,2,34),-1)#cv2.imwrite函数是保存图像到指定路径cv2.imwrite(r'D:/test_out2.jpg',img2)#创建窗口,显示结果cv2.namedWindow("image")cv2.imshow('image', img2)cv2.waitKey (0) cv2.destroyAllWindows()

图4、图5分别为cv2.rectangle()函数中,最后一个参数为10和-1时的效果。

图4

图5

4、椭圆

椭圆函数是cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)

其中参数的含义如下:

img:需要绘图的图像

center:椭圆中心点坐标

axes:椭圆尺寸(即长短轴)

angle:旋转角度(顺时针方向)

startAngle:绘制的起始角度(顺时针方向)

endAngle:绘制的终止角度(例如,绘制整个椭圆是0,360,绘制下半椭圆就是0,180)

color:线条颜色(BGR)

thickness:线条粗细(默认值=1)

lineType:线条类型(默认值=8)

shift:圆心坐标点和数轴的精度(默认值=0)

#导入包import cv2import numpy as np#创建一个图像,300×400大小,数据类型无符号8位img=np.zeros((500,500,3),np.uint8)cv2.ellipse(img,(256,256),(100,50),0,0,180,(20,213,79),-1) #创建窗口,显示结果cv2.namedWindow("image")cv2.imshow('image', img)cv2.waitKey (0) cv2.destroyAllWindows()

图6、图7分别为旋转角为180°和360°时的效果图

图6

图7

5、多边形

多边形使用cv2.polylines(img,[pts],iscolse,color,thickness)函数,其中第二个参数是多边形顶点的集合,第三个参数是首尾点是否连接。需要注意的是,多边形的连接是与集点的顺序保持一致的。如我修改下第五行集点的顺序,会得到不一样的图。

import numpy as npimport cv2img=np.zeros((512,512,3), np.uint8)#使用numpy生成一组点pts1=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32)pts=pts1.reshape((-1,1,2))cv2.polylines(img,[pts],True,(0,255,0),2)cv2.imshow('opencv',img)cv2.waitKey(0)cv2.destroyAllWindows()

图8、图9分别是pts1和pts2顺序链接对应的多边形效果图:

图8

图9

6、添加文字

使用cv2.putText(img,word,position,font,size,color,thickness)函数中,第二个参数是输入的文字,第三个参数是文字的位置,第四个参数是字体类型,第五个参数是字体大小。

import numpy as npimport cv2img=np.zeros((512,512,3), np.uint8)#使用numpy生成一组点pts1=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32)pts=pts1.reshape((-1,1,2))#使用特定字体,添加文字font=cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,'opencv',(80,90), font, 2,(255,255,255),3)cv2.polylines(img,[pts],True,(0,255,0),2)

效果图如下:

图10

7、用鼠标绘制图形

绘制图形使用的是cv2.setMouseCallback()函数,

使用时首先定义鼠标操作函数

def your_mouse_callback(event,x,y,flags,param):

定义完成后需要调用该函数

cv2.setMouseCallback(windowName,your_mouse_callback)

如下文所示代码为在背景图中通过双击鼠标左键画圆:

import cv2import numpy as npdef CircleCallback(event,x,y,flags,param):    if event==cv2.EVENT_LBUTTONDBLCLK:        cv2.circle(img,(x,y),50,(76,201,255),1)        print('圆心坐标x=:{0},y=:{1}'.format(x,y))img=cv2.imread('D:/tower.jpg',1)print(img.dtype)cv2.namedWindow('mouse_callback')cv2.setMouseCallback('mouse_callback',CircleCallback)while(True):    cv2.imshow('mouse_callback',img)    #这里注意cv2.waitKey()里面等待时间不要写0,否则画面不刷新。切记!!!    if cv2.waitKey(10)&0xFF==ord('q'):        breakcv2.destroyAllWindows()

效果图如下所示:

图11

关注我们

我们的微信公众号是: Python机器学习和图像处理

OpenCV绘图函数:cv2.line、cv2.circle、cv2.rectangle、cv2.ellipse、 cv2.putText()、cv2.setMouseCallback相关推荐

  1. OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

    学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数. 1.画线条--line()函数 介绍: cv2.line(image, start_point, en ...

  2. python OpenCV 绘图函数

    OpenCV可以用来绘制不同的集合图形,包括直线,矩形,圆,椭圆,多边形以及在图片上添加文字.用到的绘图函数包括 cv2.line(),cv2.circle(),cv2.rectangle() ,cv ...

  3. Opencv基础画图函数——line、circle、rectangle、Rect、ellipse、polylines、putText函数的用法

    目录 1.line函数 2.circle函数 3.rectangle.Rect函数 4.ellipse函数 5.polylines函数 6.随机初始化颜色 7.putText函数 总结 1.line函 ...

  4. opencv图像处理-常见绘图函数

    介绍 opencv 中常用的一些绘图函数 cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等. 在上述所有功能中,有一些常见 ...

  5. python opencv3 —— 常用工具、辅助函数、绘图函数(图像添加文本、矩形等几何形状)

    1. cv2.hconcat().cv2.vconcat() 将从摄像头捕获的多个图像帧,横向(cv2.hconcat)或纵向(cv2.vconcat)拼接到一起,使得可以在一个 window 中进行 ...

  6. Opencv画图函数整理 及 cvCircle cvLine 只能画出黑白两种颜色问题 解决

    一句话:用这些画图函数在RGB图上画,则能画出来彩色. 如果您在灰度图上画 则无论怎么设置color都只能画出黑白两种颜色. 就这一句话搞了我一个晚上,惭愧! Opencv绘图函数:http://ww ...

  7. 通过opencv的函数进行图片修复:cv2.inpaint()

    库函数使用: dst = cv2.inpaint(src,mask, inpaintRadius,flags) 参数是: src:输入8位1通道或3通道图像. inpaintMask:修复掩码,8位1 ...

  8. OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)

    OpenCV这么简单为啥不学--1.4.基础标识绘制(绘制线line函数.rectangle函数绘制四边形.circle函数绘制圆形.putText函数绘制文字.putText绘制中文文字) 目录 O ...

  9. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

最新文章

  1. 读书笔记|如何让用户为你的产品尖叫
  2. ElementUI中对el-table的某一列的时间进行格式化
  3. 参加JavaEE培训需要什么条件
  4. ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息
  5. rk3288对于parameter参数文件的解析处理【转】
  6. 取消浏览器的默认样式
  7. 如何将kux格式的视频转换成我们常用的MP4格式
  8. 解决运行Vue项目localhost8080拒绝连接
  9. 如何设计一个秒杀系统(完整版)
  10. html将网页变成图片,保存网页为图片,教您如何将整个网页保存为图片
  11. python乒乓球比赛规则介绍_乒乓球比赛规则简介
  12. 3种方式教你怎样显示手机wifi密码,不再愁密码忘记了
  13. 管理与维护linux系统(任务五 六 七 八)
  14. 字节跳动 校招薪资曝光,老员工被倒挂疯了~
  15. 怎么选择Java培训机构?
  16. 仓库管理怎么做?这5大仓库管理软件能帮到你
  17. R 文字挖掘基本流程
  18. 对智能手表的功能买点认知介绍
  19. 解决 PHP SOAP-ERROR: Parsing WSDL: Couldn't load from 问题
  20. scala 函数方法、函数方法的实现原理

热门文章

  1. 地铁三号线 - 跟婶婶道个别
  2. RabbitMQ大揭秘
  3. uni-app获取视频缩略图封面插件
  4. vue利用element勾选框样式编写可勾选的卡片组件
  5. 有限域上的所有不可约多项式
  6. .NET Core网站发布到Linux系统的方法(一)
  7. DEDECMS安装使用教程
  8. 诺基亚N81手机密码如何解锁
  9. web软件上线测试,网站或软件系统上线前对注册功能的安全测试
  10. 找不到答案的时候 就去看一看这个世界