首页 > 其他分享 >使用opencv画框,标出坐标

使用opencv画框,标出坐标

时间:2024-09-20 20:51:07浏览次数:10  
标签:start color point cv2 标出 opencv points 画框 event

import cv2
import numpy as np


drawing, start_x, start_y = False, -1, -1
prev_point = None # 上一个点
history = list()


def draw_box(points, color=(0, 255, 0), thickness=1):
    if points:
        p1, p2 = points
        top_left, top_right, bottom_right, bottom_left = p1, (
            p2[0], p1[1]), p2, (p1[0], p2[1])
        cv2.line(mask, top_left, top_right, color, thickness)  # 上边
        cv2.line(mask, top_right, bottom_right, color, thickness)  # 右边
        cv2.line(mask, bottom_right, bottom_left, color, thickness)  # 下边
        cv2.line(mask, bottom_left, top_left, color, thickness)  # 左边


def mouse_event(event, x, y, flags, param):
    """
    鼠标的回调函数
    """
    global drawing, start_x, start_y, prev_point
    points = ((start_x, start_y), (x, y))
    # 通过 event 判断具体是什么事件,这里是左键按下
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        start_x, start_y = x, y
        prev_point = None
    # 鼠标移动,画图
    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing:
            # 清除拖动的框
            draw_box(prev_point, color=(0, 0, 0))
            # 画框
            draw_box(points)
            prev_point = points
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        draw_box(prev_point, color=(0, 0, 0))
        draw_box(points)
        history.append(points)
        prev_point = points


img = cv2.imread("background.jpg")
cv2.namedWindow('image')
# 定义鼠标的回调函数
cv2.setMouseCallback('image', mouse_event)

# 创建掩码,在掩码上画线
mask = np.zeros_like(img)


while True:
    cv2.imshow('image', cv2.bitwise_or(img, mask))
    # 按下 ESC 键退出
    if cv2.waitKey(20) == 27 or cv2.waitKey(20) == ord('q'):
        break
    elif cv2.waitKey(20) == ord('z'):
        if history:
            draw_box(history.pop(), color=(0, 0, 0))

for points in history:
    print(points)


标签:start,color,point,cv2,标出,opencv,points,画框,event
From: https://www.cnblogs.com/ccqk/p/18423250

相关文章

  • OpenCV(YCrCb 和 HSV 颜色空间比较)
    目录1.YCrCb颜色空间1.1YCrCb颜色空间的定义1.2YCrCb的转换1.3应用场景2.HSV颜色空间2.1HSV颜色空间的定义2.2HSV的转换2.3应用场景3.YCrCb和HSV颜色空间的比较4.总结在图像处理领域中,除了传统的RGB颜色空间之外,YCrCb和HSV颜色空间被广泛应用于各种图......
  • 香橙派5Pro+虚拟机Ubuntu18.04交叉编译+Opencv4.7
    1.基础工具安装①Ubuntu虚拟机下交叉编译工具链安装香橙派5Pro为Arm64位架构,因此需要安装g++-aarch64-linux-gnu以及gcc-aarch64-linux-gnu(有其它交叉编译器,本文以此编译器为例)更新软件源sudoaptupdatesudoaptupgrate点击查看交叉编译工具链安装apt-cachesearcha......
  • OpenCV(cv::equalizeHist())
    目录1.函数定义2.函数原理3.示例4.应用场景5.注意事项6.实际效果cv::equalizeHist()是OpenCV中用于图像直方图均衡化的函数。该函数主要用于增强图像的对比度,尤其是在图像的光照条件不均匀或整体对比度较低的情况下,直方图均衡化可以有效改善图像的细节。1.函数定......
  • OpenCV(cv::divide())
    目录1.函数定义2.工作原理3.示例3.1矩阵除法3.2矩阵和标量的除法3.3使用缩放因子4.注意事项5.应用场景cv::divide()是OpenCV中用于执行数组或标量的逐元素除法操作的函数。它允许对矩阵进行元素级的除法操作,支持两种使用方式:矩阵与矩阵之间的除法,或矩阵与标量之间的......
  • 变脸大师:基于OpenCV与Dlib的人脸换脸技术实现
    目录简介 重新简介思路解析1.加载人脸检测器和特征点预测模型2.读取两张人脸图片3.获取人脸的特征点4.使用Delaunay三角剖分5.仿射变换三角形6.三角形变形并复制7.脸部轮廓掩模8.无缝克隆换脸9.缩放图像10.显示换脸结果整体代码效果展示准备换脸的......
  • OpenCv(一)
    计算机视觉和机器视觉的区别计算机视觉(ComputerVision)和机器视觉(MachineVision)是两个密切相关但又有区别的领域。两者在应用、技术和目标上都有所不同。**计算机视觉:**主要是研究如何使计算机能够理解和处理图像和视频数据。其目标是从视觉数据中提取有用的信息,实现图像......
  • OpenCV(cv::Sobel())
    目录1.函数定义2.工作原理2.1Sobel核2.2计算过程(1)x方向的Sobel卷积计算(2)y方向的Sobel卷积计算(3)合并x和y方向的梯度2.3示例3.示例4.使用场景总结cv::Sobel()是OpenCV中用于计算图像的梯度(边缘)的常用函数之一。它实现了Sobel滤波器,这是一种常见......
  • OpenCV(cv::magnitude())
    目录1.函数定义2.使用场景3.示例4.注意事项cv::magnitude()是OpenCV中用于计算向量的大小(模)的函数。它可以处理二维向量的模,也可以用于计算图像中每个像素点的梯度大小,通常在处理图像梯度或傅里叶变换时使用。1.函数定义voidcv::magnitude(InputArrayx,......
  • 护目镜佩戴检测系统 Opencv
    护目镜佩戴检测系统利用摄像头和图像识别技术,护目镜佩戴检测系统实时监测工人的护目镜佩戴情况,护目镜佩戴检测系统通过拍摄工人的面部图像,并使用算法分析图像中的眼睛和护目镜位置,判断是否正确佩戴护目镜。护目镜佩戴检测系统能够实时监测工人的护目镜佩戴情况,护目镜佩戴检测系统及......
  • OpenCV_图像旋转超详细讲解
    图像转置transpose(src, dst);transpose()可以实现像素下标的x和y轴坐标进行对调:dst(i,j)=src(j,i),接口形式transpose(InputArraysrc,//输入图像OutputArraydst,//输出)图像翻转flip(src,dst,1);flip()函数可以实现对图像的水平翻转、垂直翻转和双向......