📜  在Opencv-Python中用直线将新点连接到图像上的前一个点(1)

📅  最后修改于: 2023-12-03 15:23:25.395000             🧑  作者: Mango

在 Opencv-Python 中用直线将新点连接到图像上的前一个点

OpenCV(Open Source Computer Vision)是一个开源计算机视觉库,可以用于图像处理、计算机视觉等方面。在进行图像处理时,经常需要对图像中的一些点进行连接,这时候我们可以使用直线连接这些点。

下面是在 Opencv-Python 中用直线将新点连接到图像上的前一个点的实现。

步骤
  1. 导入必要的库

使用 Opencv 之前,需要先导入必要的库,包括 cv2numpy

import cv2
import numpy as np
  1. 定义绘图函数

定义一个函数 draw_circle,用于在图像上绘制一个圆和直线。

def draw_circle(event,x,y,flags,param):
    global ix,iy,draw_flag,img
    
    if event == cv2.EVENT_LBUTTONDOWN:
        draw_flag=True
        ix,iy=x,y
        cv2.circle(img,(x,y),3,(0,255,0),-1)
        
    elif event == cv2.EVENT_MOUSEMOVE:
        if draw_flag==True:
            cv2.line(img,(ix,iy),(x,y),(0,0,255),1)
            ix,iy=x,y
    elif event == cv2.EVENT_LBUTTONUP:
        draw_flag=False
        cv2.line(img,(ix,iy),(x,y),(0,0,255),1)

注: 其中,EVENT_LBUTTONDOWN 代表鼠标左键按下事件,EVENT_MOUSEMOVE 代表鼠标移动事件,EVENT_LBUTTONUP 代表鼠标左键抬起事件。

  1. 创建图像

创建一个黑色的 512 * 512 的图像。

img = np.zeros((512,512,3), np.uint8)
  1. 注册回调函数

注册 draw_circle 函数为鼠标事件的回调函数。

cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
  1. 显示图像

显示图像,并等待用户按下键盘任意键关闭窗口。

while(1):
    cv2.imshow('image',img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()
代码片段
import cv2
import numpy as np


def draw_circle(event,x,y,flags,param):
    global ix,iy,draw_flag,img
    
    if event == cv2.EVENT_LBUTTONDOWN:
        draw_flag=True
        ix,iy=x,y
        cv2.circle(img,(x,y),3,(0,255,0),-1)
        
    elif event == cv2.EVENT_MOUSEMOVE:
        if draw_flag==True:
            cv2.line(img,(ix,iy),(x,y),(0,0,255),1)
            ix,iy=x,y
    elif event == cv2.EVENT_LBUTTONUP:
        draw_flag=False
        cv2.line(img,(ix,iy),(x,y),(0,0,255),1)

img = np.zeros((512,512,3), np.uint8)

cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)

while(1):
    cv2.imshow('image',img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()
结论

通过本文介绍,我们可以了解到在 Opencv-Python 中如何通过直线将新点连接到图像上的前一个点。同时,我们还介绍了如何创建一个绘图函数、如何注册回调函数、如何创建图像等内容。希望本文能对大家学习 Opencv-Python 有所帮助。