OpenCV绘图函数:cv2.line、cv2.circle、cv2.rectangle、cv2.ellipse、 cv2.putText()、cv2.setMouseCallback
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 cv2
import 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 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)
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 cv2
import 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 np
import cv2
img=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 np
import cv2
img=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_SIMPLEX
cv2.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 cv2
import numpy as np
def 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'):
break
cv2.destroyAllWindows()
效果图如下所示:
图11
关注我们
我们的微信公众号是: Python机器学习和图像处理
OpenCV绘图函数:cv2.line、cv2.circle、cv2.rectangle、cv2.ellipse、 cv2.putText()、cv2.setMouseCallback相关推荐
- OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数. 1.画线条--line()函数 介绍: cv2.line(image, start_point, en ...
- python OpenCV 绘图函数
OpenCV可以用来绘制不同的集合图形,包括直线,矩形,圆,椭圆,多边形以及在图片上添加文字.用到的绘图函数包括 cv2.line(),cv2.circle(),cv2.rectangle() ,cv ...
- Opencv基础画图函数——line、circle、rectangle、Rect、ellipse、polylines、putText函数的用法
目录 1.line函数 2.circle函数 3.rectangle.Rect函数 4.ellipse函数 5.polylines函数 6.随机初始化颜色 7.putText函数 总结 1.line函 ...
- opencv图像处理-常见绘图函数
介绍 opencv 中常用的一些绘图函数 cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等. 在上述所有功能中,有一些常见 ...
- python opencv3 —— 常用工具、辅助函数、绘图函数(图像添加文本、矩形等几何形状)
1. cv2.hconcat().cv2.vconcat() 将从摄像头捕获的多个图像帧,横向(cv2.hconcat)或纵向(cv2.vconcat)拼接到一起,使得可以在一个 window 中进行 ...
- Opencv画图函数整理 及 cvCircle cvLine 只能画出黑白两种颜色问题 解决
一句话:用这些画图函数在RGB图上画,则能画出来彩色. 如果您在灰度图上画 则无论怎么设置color都只能画出黑白两种颜色. 就这一句话搞了我一个晚上,惭愧! Opencv绘图函数:http://ww ...
- 通过opencv的函数进行图片修复:cv2.inpaint()
库函数使用: dst = cv2.inpaint(src,mask, inpaintRadius,flags) 参数是: src:输入8位1通道或3通道图像. inpaintMask:修复掩码,8位1 ...
- OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
OpenCV这么简单为啥不学--1.4.基础标识绘制(绘制线line函数.rectangle函数绘制四边形.circle函数绘制圆形.putText函数绘制文字.putText绘制中文文字) 目录 O ...
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
最新文章
- 读书笔记|如何让用户为你的产品尖叫
- ElementUI中对el-table的某一列的时间进行格式化
- 参加JavaEE培训需要什么条件
- ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息
- rk3288对于parameter参数文件的解析处理【转】
- 取消浏览器的默认样式
- 如何将kux格式的视频转换成我们常用的MP4格式
- 解决运行Vue项目localhost8080拒绝连接
- 如何设计一个秒杀系统(完整版)
- html将网页变成图片,保存网页为图片,教您如何将整个网页保存为图片
- python乒乓球比赛规则介绍_乒乓球比赛规则简介
- 3种方式教你怎样显示手机wifi密码,不再愁密码忘记了
- 管理与维护linux系统(任务五 六 七 八)
- 字节跳动 校招薪资曝光,老员工被倒挂疯了~
- 怎么选择Java培训机构?
- 仓库管理怎么做?这5大仓库管理软件能帮到你
- R 文字挖掘基本流程
- 对智能手表的功能买点认知介绍
- 解决 PHP SOAP-ERROR: Parsing WSDL: Couldn't load from 问题
- scala 函数方法、函数方法的实现原理