参考 opencv绘图函数(cv2.line(), - 云+社区 - 腾讯云
主要有cv2.line()//画线, cv2.circle()//画圆, cv2.rectangle()//长方形,cv2.ellipse()//椭圆, cv2.putText()//文字绘制
主要参数
#创建一个图像,300×400大小,数据类型无符号8位
img=np.zeros((300,400,3),np.uint8)
cv2.line(img,(10,10),(200,200),(0,255,0),3)#绿色,3个像素宽度
cv2.rectangle(img,(10,10),(30,40),(134,2,34),1)
cv2.circle(img,(60,60),30,(0,0,213),-1)
画椭圆——需要输入中心点位置,长轴和短轴的长度,椭圆沿逆时针选择角度,椭圆沿顺时针方向起始角度和结束角度
cv2.ellipse(img,(256,256),(100,50),0,0,180,(20,213,79),-1) #线型-1表示填充
import numpy as np
pts=np.array([[10,3],[48,19],[60,3],[98,19]],np.int32) #数据类型必须是int32
pts=pts.reshape((-1,1,2))
'''这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。
如果第三个参数是 False,我们得到的多边形是不闭合的(首尾不相连)。
'''
cv2.polylines(img,[pts],True,(0,0,255),1) # 图像,点集,是否闭合,颜色,线条粗细
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,’OpenCV’,(80,90), font, 2,(255,255,255),3)
示例——鼠标双击画圆
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('empire.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()
效果如下:
拖动画矩形或者鼠标移动轨迹,检测鼠标是否按下,按下后确定初始点(ix,iy),鼠标按下状态绘制鼠标轨迹,松开后绘制矩形
import cv2
import numpy as np
drawing = False # 鼠标未按下时不绘制
mode = True # true时绘制矩形,按'm'变成绘制曲线
ix, iy = -1, -1
# 定义鼠标回调函数
def MouseCallback(event, x, y, flags, param):
global ix, iy, drawing, mode
# 按下左键确定鼠标起始位置
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, y
# 左键按下状态并且移动开始绘制
elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
if drawing is True:
if mode is False:
pass
# cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
else:
# 默认开启绘制鼠标轨迹,按m取消
cv2.circle(img, (x, y), 1, (255, 0, 0), -1)
elif event == cv2.EVENT_LBUTTONUP:
if drawing is True:
if mode is True:
cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 1)
drawing = False
img = cv2.imread('empire.jpg', 1)
cv2.namedWindow('rectangle')
cv2.setMouseCallback('rectangle', MouseCallback)
while(True):
cv2.imshow('rectangle', img)
k = cv2.waitKey(20) & 0xFF
if k == ord('m'):
mode = not mode
elif k == ord('q'):
break