Python+OpenCV实战之拖拽虚拟方块的实现

yizhihongxing

“Python+OpenCV实战之拖拽虚拟方块的实现”是一个非常有趣的实践项目,可以提高我们的Python编程和OpenCV图像处理技能。下面是实现该项目的攻略:

1. 准备工作

在开始项目之前,需要进行以下准备工作:

1.1 安装OpenCV

如果你还没有安装OpenCV,请通过以下命令在终端中安装:

pip3 install opencv-python

1.2 下载代码

你可以通过github上的链接克隆完整代码,使用以下命令:

git clone https://github.com/LiuXingMing/Python-OpenCV-VirtualBox.git

1.3 准备图片

在项目中,需要拖动一个虚拟的方块,因此我们需要一张包含一个实物方块的图片。你可以使用任何一张图片,只需要将实物方块的位置抠出来即可。

2. 实例演示

下面有两个示例,在这里我们将介绍如何实现这两个示例:

2.1 实例1:拖拽虚拟方块

这个示例的功能是让我们可以通过鼠标拖动一个虚拟的方块,实现拖拽的效果。

操作步骤:

  1. 进入项目文件夹,并执行以下命令:

python VirtualBox.py

  1. 在打开的窗口中,左键点击虚拟方块并拖动,即可实现拖拽效果。

代码实现:

import cv2

img = cv2.imread('物块.png')
x, y, w, h = 100, 200, 200, 200  #定义图片显示位置和大小
roi = img[y:y + h, x:x + w]  # 把图片的二维坐标 以[x,y]为顶点,[h,w]为矩阵的长度和宽度节点截出来。
cv2.namedWindow('image')
cv2.imshow('image', img)  # 显示整个图片

drag = False  # 标记是否可以开始拖拽
gx, gy = 0, 0  # 用于记录图像移动的坐标

# 鼠标事件处理函数
def mouse_event(event, x, y, flags, param):
    global gx, gy, drag
    if event == cv2.EVENT_LBUTTONDOWN:  # 左键按下开始拖拽
        if x > (gx + 100) and x < (gx + 300) and y > (gy + 200) and y < (gy + 400):
            drag = True
            gx, gy = x - gx, y - gy
    elif event == cv2.EVENT_LBUTTONUP:  # 左键释放停止拖拽
        drag = False
    elif event == cv2.EVENT_MOUSEMOVE and drag:  # 拖拽过程中不断更新图像位置并实时显示
        gx, gy = x - gx, y - gy
    else:
        pass

# 注册鼠标事件处理函数并处理事件
cv2.setMouseCallback('image', mouse_event)
while True:
    if drag:
        img[gy:gy + 200, gx:gx + 200] = roi  # 实时更新拖拽后的坐标
    cv2.imshow('image', img)  # 实时显示图片
    if cv2.waitKey(1) & 0xFF == 27:  # 按下“ESC”键退出循环
        break

cv2.destroyAllWindows()

2.2 实例2:拖拽虚拟方块并调整大小

这个示例的功能是允许我们通过鼠标拖动虚拟方块并调整大小实现拖拽和缩放的效果。

操作步骤:

  1. 进入项目文件夹,并执行以下命令:

python VirtualBox_resize.py

  1. 在打开的窗口中,左键点击虚拟方块并拖动,可以实现拖拽效果,右键点击方块的边缘区域并拖动,可以实现调整方块大小的效果。

代码实现:

import cv2

img = cv2.imread('物块.png')
x, y, w, h = 100, 200, 200, 200  #定义图片显示位置和大小
roi = img[y:y + h, x:x + w]  # 把图片的二维坐标 以[x,y]为顶点,[h,w]为矩阵的长度和宽度节点截出来。
cv2.namedWindow('image')
cv2.imshow('image', img)  # 显示整个图片

drag = False  # 标记是否可以开始拖拽
gx, gy = 0, 0  # 用于记录图像移动的坐标
rw, rh = 200, 200  # 定义初始的图像宽高

# 鼠标事件处理函数
def mouse_event(event, x, y, flags, param):
    global gx, gy, drag, rw, rh
    if event == cv2.EVENT_LBUTTONDOWN:  # 左键按下开始拖拽
        if x > gx and x < (gx + rw) and y > gy and y < (gy + rh):
            drag = True
            gx, gy = x - gx, y - gy
        elif x > gx + rw - 20 and x < (gx + rw) and y > gy + rh - 20 and y < (gy + rh):
            drag = True
            gx, gy = x - (gx + rw), y - (gy + rh)
            rw, rh = rw + gx, rh + gy  # 按边框修改宽高
    elif event == cv2.EVENT_LBUTTONUP:  # 左键释放停止拖拽
        drag = False
    elif event == cv2.EVENT_MOUSEMOVE and drag:  # 拖拽过程中不断更新图像位置并实时显示
        gx, gy = x - gx, y - gy
    else:
        pass

# 注册鼠标事件处理函数并处理事件
cv2.setMouseCallback('image', mouse_event)
while True:
    if drag:
        img = cv2.imread('物块.png')  # 重新读取图片
        roi = img[y:y + rh, x:x + rw]  # 重新裁剪图片
        img[gy:gy + rh, gx:gx + rw] = roi  # 实时更新拖拽后的坐标
    cv2.imshow('image', img)  # 实时显示图片
    if cv2.waitKey(1) & 0xFF == 27:  # 按下“ESC”键退出循环
        break

cv2.destroyAllWindows()

以上就是“Python+OpenCV实战之拖拽虚拟方块的实现”的完整攻略及两个示例的实现过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+OpenCV实战之拖拽虚拟方块的实现 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django一小时写出账号密码管理系统

    下面是详细的“Django一小时写出账号密码管理系统”的完整攻略: Step 1:安装Django 首先,我们需要在本地环境中安装Django。可以通过以下命令进行安装: pip install django Step 2:创建Django项目 接下来,我们需要通过以下命令创建一个Django项目: django-admin startproject pas…

    人工智能概览 2023年5月25日
    00
  • Python识别快递条形码及Tesseract-OCR使用详解

    对于“Python识别快递条形码及Tesseract-OCR使用详解”的完整攻略,我们可以从以下四个部分展开: 1. 概述 本文主要介绍如何使用Python程序进行快递条形码的识别和解析,并详细介绍了Tesseract-OCR的使用方法。本文将首先介绍什么是条形码,条形码的编码方式以及常见的二维码和一维码等。然后,介绍了Python中条形码识别的几种实现方式…

    人工智能概论 2023年5月25日
    00
  • Python使用PyAudio制作录音工具的实现代码

    下面是讲解Python使用PyAudio制作录音工具的实现代码的攻略: 1. 确定需求 在开始编写代码之前,我们需要先确定需求,即我们要实现的功能。根据题目要求,我们需要编写一个Python程序,可以通过PyAudio实现录音,将录制好的音频文件保存到本地。 2. 安装依赖 在开始编写代码之前,我们需要安装必要的依赖,即PyAudio库。在安装PyAudio…

    人工智能概览 2023年5月25日
    00
  • Docker AIGC等大模型深度学习环境搭建步骤最新详细版

    Docker AIGC大模型深度学习环境搭建步骤 简介 Docker是一款虚拟化容器技术,它可以将应用及其依赖打包为一个可移植的容器,从而实现软件环境的一致性和跨平台性。在深度学习领域,Docker不仅可以简化环境搭建的复杂度,也可以减少环境带来的差异性。 AIGC (AI Grand Challenge)是面向深度学习领域的AI竞赛平台,通过在平台上提供大…

    人工智能概览 2023年5月25日
    00
  • Python中if __name__==‘__main__‘用法详情

    下面是Python中if name==’main’用法的详细讲解攻略: 1. 基本概念解释 在Python中,每个模块都有一个名称,称之为“name”。当我们运行一个Python文件时,Python会把该文件作为一个模块,然后赋予一个名称,即“main”。 因此,if name == ‘main’这个条件语句表示的是:如果当前模块的名称为“main”,则执行…

    人工智能概论 2023年5月25日
    00
  • pytorch算子torch.arange在CPU GPU NPU中支持数据类型格式

    PyTorch算子torch.arange在CPU/GPU/NPU中支持数据类型格式 torch.arange是PyTorch库中用于创建一个具有一定规律的序列,即等差数列的函数。针对不同场景,torch.arange也支持不同的数据类型格式,包括CPU、GPU和NPU。本文将详细介绍torch.arange在不同设备上支持的数据类型格式。 支持的数据类型格…

    人工智能概论 2023年5月25日
    00
  • 利用consul在spring boot中实现分布式锁场景分析

    下面我将为你详细讲解如何利用consul在Spring Boot中实现分布式锁的攻略。 需求分析 在分布式系统中,如果多个节点同时操作同一份数据,就会出现数据竞争的问题,为了避免这种情况,我们需要实现分布式锁来控制多个节点的并发访问。 consul是一款分布式服务发现和配置工具,可以满足我们实现分布式锁的需求。在Spring Boot中,我们可以通过使用Co…

    人工智能概览 2023年5月25日
    00
  • win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码

    下面是“win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码”的完整攻略。 1. 安装 Tesseract-OCR 首先需要下载并安装 Tesseract-OCR,Tesseract-OCR 是一个开源 OCR(Optical Character Recognition)引擎,可识别超过100种语言,并支持多种操作系统。…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部