当我们在进行图像处理时,需要在图像上标记一些点或者用不同的形状进行标注,这时候我们就需要使用OpenCV的绘图函数了。cv2.drawMarker()是opencv中的一个绘图函数,它可以在图像上绘制指定位置的Marker,即标记点。本篇文章将详细介绍cv2.drawMarker()函数的用法,以及如何实现在opencv中用鼠标画点。
drawMarker()函数的语法和参数
cv2.drawMarker()函数的语法如下:
cv2.drawMarker(image, position, color, markerType, markerSize, thickness, line_type)
其中各参数的含义如下:
- image:要绘制Marker的图像数组;
- position:Marker的位置,即一个二元元组,格式为(x,y),表示Marker在图像上的横纵坐标;
- color:Marker的颜色,即一个三元素的RGB元组;
- markerType:Marker的类型,支持以下7种marker类型:
- cv2.MARKER_CROSS:十字型;
- cv2.MARKER_TILTED_CROSS:斜十字型;
- cv2.MARKER_STAR:星型;
- cv2.MARKER_DIAMOND:菱形;
- cv2.MARKER_SQUARE:正方形;
- cv2.MARKER_TRIANGLE_UP:上三角;
- cv2.MARKER_TRIANGLE_DOWN:下三角;
- markerSize:Marker的大小,即像素大小;
- thickness:Marker轮廓线粗细;
- line_type:Marker轮廓线类型,支持以下4种线型:
- cv2.LINE_4:四联通线型,即四领域连接线型;
- cv2.LINE_8:八联通线型,即八领域连接线型;
- cv2.LINE_AA:反锯齿线型,即Anti-aliasing线型。
鼠标画点示例
以下将演示如何使用cv2.drawMarker()函数实现在opencv中用鼠标画点的功能。这里会给出两种不同的实现方式,一种是在静态图像上画点,一种是在摄像头实时画点。
在静态图像上画点
import cv2
def draw_circle(event, x, y, flags, param):
global mouseX, mouseY
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.drawMarker(img, (x, y), (0, 0, 255), cv2.MARKER_STAR, 30, 2)
img = cv2.imread('test.jpg')
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while True:
cv2.imshow('image', img)
k = cv2.waitKey(20) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
以上代码中,我们定义了一个绘图函数draw_circle(),它的作用是在指定位置画一个红色的星型Marker。然后我们通过cv2.setMouseCallback()函数将绘图函数绑定到图像上鼠标双击事件上。
在主循环中通过cv2.imshow()函数显示图像,通过cv2.waitKey()函数等待用户操作,如果用户按下ESC键则退出程序。
在实时图像上画点
import cv2
def draw_circle(event, x, y, flags, param):
global mouseX, mouseY
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.drawMarker(frame, (x, y), (0, 0, 255), cv2.MARKER_STAR, 30, 2)
cap = cv2.VideoCapture(0)
cv2.namedWindow('frame')
cv2.setMouseCallback('frame', draw_circle)
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
以上代码中,我们定义了一个回调函数draw_circle(),实现了在摄像头拍摄的实时画面上双击鼠标即在指定位置画一个红色的星型Marker。通过cv2.setMouseCallback()函数将该回调函数绑定到摄像头实时捕获的图像上。然后我们通过cv2.VideoCapture()函数初始化一个视频捕获器,通过cv2.imshow()函数显示捕获到的图像,并在ESC键被按下时退出程序。
总结
以上是关于python opencv鼠标画点之cv2.drawMarker()函数的完整攻略。通过本篇文章的介绍,我们可以清晰明了地了解到cv2.drawMarker()函数的语法和参数,并掌握了在静态图像和实时图像上使用该函数绘制Marker的方法。这对于图像处理有很大的帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python opencv鼠标画点之cv2.drawMarker()函数 - Python技术站