OpenCV-opencv下载安装和基本操作

文章目录

  • 一、实验目的
  • 二、实验内容
  • 三、实验过程
    • OpenCV-python的安装与配置
      • python下载和环境配置
      • PIP镜像
      • 安装Numpy
      • 安装openCV-python
      • 检验opencv安装是否成功
    • openCV-python的基本操作
      • 图像输入和展示以及写出
      • openCV界面编程
      • 单窗口显示多图片
      • 鼠标事件
      • 键盘事件
      • 滑动条事件
  • 四、实验结果
  • 五、实验总结

一、实验目的

本实验目的是学习如何使用opencv库来读取文件并显示图象,学习opencv中的基本事件——窗口事件,鼠标事件、键盘事件以及滑动条事件,同时熟悉OpenCV库的函数和方法,为进一步学习和应用计算机视觉和图像处理提供基础。

二、实验内容

1、opencv的安装

2、opencv的基本操作 - 图像输入输出模块:通过cv2.imread()函数读取图像文件,并使用cv2.imshow()函数显示图像。使用cv2.waitKey()等待按键响应,然后使用cv2.destroyAllWindows()关闭窗口。使用shape属性获取图像的形状(高度、宽度)。使用cv2.imwrite()函数将图像保存到指定的文件中。 - opencv界面编程:界面编程主要由High-level GUI模块支持。 - 单窗口显示多图片:使用hstack函数实现单窗口显示多幅图像。 - 销毁窗口:使用destroyWindow和destroyAllWindows来销毁窗口,前者为销毁某一个制定名称的窗口,后者为销毁所有的窗口。 - 鼠标事件:我们使用鼠标事件来实现与用户的交互操作,有鼠标点击事件、鼠标移动事件、鼠标释放事件等。 - 键盘事件:键盘事件由waitKey函数实现。 - 滑动条事件:使用cv2.createTrackbar()函数创建一个滑动条,并指定滑动条的名称、所属窗口、数值范围和初始值等参数。定义一个滑动条事件的回调函数,并将其与窗口绑定。在滑动条事件回调函数中,根据滑动条的数值变化对图像进行实时更新和显示。

三、实验过程

OpenCV-python的安装与配置

python下载和环境配置

1.前往python官网进行对应版本的下载

在这里插入图片描述

2.下载完成打开程序进行配置,点击Install Now 也可以进行安装目录的更改

在这里插入图片描述

3.检测安装成果,打开命令行窗口,输入pyhthon

如果显示如下图就安装配置成功

在这里插入图片描述

PIP镜像

再命令行窗口分别运行以下两行代码,如下图

第一行是更新pip

第二行是把pip对应的国外网站改为镜像国内的,提高下载速度 python -m pip install --upgrade pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

安装Numpy

打开命令行输入 pip install numpy

来下载Numpy包,如图(不更改pip镜像会很慢)
在这里插入图片描述

安装openCV-python

命令行运行 pip install opencv-python

如图
在这里插入图片描述

再安装一下openCV的扩展包,后面接版本号,和我们安装openCV版本一致即可 pip install opencv-contrib-python4.8.0.76

再安装一个可视化库 pip install matplotlib

在这里插入图片描述

检验opencv安装是否成功

命令行先输入python

然后导入一下包 import cv2

再检查一下版本 cv2.version

如果能正常显示版本就是安装成功,然后exit()退出即可

openCV-python的基本操作

图像输入和展示以及写出

    # 读取图像文件
    src_image = cv2.imread('bird.jpg', cv2.IMREAD_COLOR)
    gray_image = cv2.imread('bird.jpg', cv2.IMREAD_GRAYSCALE)
    cv2.imshow("src_image", src_image)
    print(src_image.shape)
    cv2.waitKey(0)
    
    # 写入图像文件
    cv2.imwrite('gray_image.jpg', gray_image)

效果展示

图像写入和展示

在这里插入图片描述

灰度图像的写入

在这里插入图片描述

openCV界面编程

    OpenCV界面编程 
    img = cv2.imread('image.jpg') 
    cv2.imshow("mying", img) 
    cv2.waitKey(0)

效果展示

对应图片会出现在以mying命名的窗口中

在这里插入图片描述

单窗口显示多图片

    # 单窗口显示多图片
    
    def opencv_muti_pic():
        img1 = cv2.imread('1.jpg')
        print(img1.shape)
        img2 = cv2.imread('1.jpg')
        print(img2.shape)
        img3 = cv2.imread('1.jpg')
        print(img3.shape)
        imgs = np.hstack([img1, img2, img3])
        # 展示多个
        cv2.imshow('mutil_pic', imgs)
        # 等待关闭
        cv2.waitKey(0)
    
    
    opencv_muti_pic()

效果展示

在这里插入图片描述

鼠标事件

    鼠标事件 # 回调函数,用于处理鼠标事件 
    def mouse_callback(event, x, y, flags, param): 
        if event == cv2.EVENT_MOUSEMOVE: # 鼠标移动事件 
            print('Mouse moved at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_LBUTTONDOWN: # 鼠标左键按下事件 
            print('Left button down at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_RBUTTONDOWN: # 鼠标右键按下事件 
            print('Right button down at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_MBUTTONDOWN: # 鼠标中键按下事件
            print('Middle button down at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_LBUTTONUP: # 鼠标左键释放事件 
            print('Left button up at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_RBUTTONUP: # 鼠标右键释放事件 
            print('Right button up at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_MBUTTONUP: # 鼠标中键释放事件 
            print('Middle button up at (%d, %d)' % (x, y))
        elif event == cv2.EVENT_LBUTTONDBLCLK: # 鼠标左键双击事件 
            print('Left button double-clicked at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_RBUTTONDBLCLK: # 鼠标右键双击事件 
            print('Right button double-clicked at (%d, %d)' % (x, y)) 
        elif event == cv2.EVENT_MBUTTONDBLCLK: # 鼠标中键双击事件 
            print('Middle button double-clicked at (%d, %d)' % (x, y))
    # 创建一个名为 "image" 的窗口
    cv2.namedWindow('image')
    # 读取图像
    img = cv2.imread('image.jpg')
    # 在窗口中显示图像
    cv2.imshow('image', src_image)
    # 设置鼠标回调函数
    cv2.setMouseCallback('image', mouse_callback)
    cv2.waitKey(0)
    # 关闭窗口
    cv2.destroyAllWindows()

效果展示

在这里插入图片描述

对应输出结果会随鼠标指针在图像上的位置而变化
在这里插入图片描述

键盘事件

    # 键盘事件 
    img7 = numpy.zeros((100, 200)) 
    cv2.imshow("windowname", img7 
    key1 = cv2.waitKey(0) # 任意按键按下,图片显示结束,返回按键键值 
    print("按下的键值:", key1) 
    cv2.imshow("windowname2", img7) 
    key2 = cv2.waitKey(5000) # 任意按键按下,图片显示结束,返回按键键值 
    print("按下的键值:", key2) 
    cv2.destroyAllWindows()

效果展示

键盘事件

输入q的情况,会返回对应的q的ASCII码值

在这里插入图片描述

第二个窗口长期不按会显示-1的返回结果

在这里插入图片描述

滑动条事件

    滑动条事件
        # 回调函数,用于处理滑动条变化事件
        def TrackbarCallback(value):
            print('Trackbar value is: %d' % value)
    
    
        # 创建一个名为 "image" 的窗口
        cv2.namedWindow('image')
        # 读取图像
        img = cv2.imread('image.jpg')
        # 在窗口中显示图像
        cv2.imshow('image', img)
        # 创建一个名为 "slider" 的滑动条
        cv2.createTrackbar('slider', 'image', 0, 100, TrackbarCallback)
        # 获取滑动条的当前值
        slider_value = cv2.getTrackbarPos('slider', 'image')
        print('Initial slider value: %d' % slider_value)
        # 设置滑动条的值
        cv2.setTrackbarPos('slider', 'image', 50)
        # 循环等待键盘输入
        while True:
            key = cv2.waitKey(10)
            if key == ord('q'):
                break
        # 关闭窗口
        cv2.destroyAllWindows()

效果展示
在这里插入图片描述
通过鼠标滑动图片上方的滑动条可以再控制台动态的输出滑动条信息

在这里插入图片描述

四、实验结果

实验结果已经在实验过程中写出,实验结果的所有截图均可在实验过程中查看,这里不做过多展示

五、实验总结

通过本次实验,我对以下知识有了更好的掌握:文件读取和图像显示:学习如何使用OpenCV库来读取图像文件并在窗口中显示图像,这是图像处理的基础操作。窗口事件:了解如何处理窗口事件,比如窗口的关闭事件,以确保图像显示过程中的交互性和稳定性。鼠标事件:学习如何捕获和处理鼠标事件,比如点击、移动和拖拽等,为图像标记、交互式测量等功能的实现奠定基础。键盘事件:掌握如何处理键盘事件,比如按键响应和组合操作,为实现键盘控制的图像处理流程打下基础。滑动条事件:了解如何创建和使用滑动条,实现图像处理参数的实时调整和交互式控制。为进一步学习和应用计算机视觉和图像处理奠定基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

持续集成交付CICD:GitLabCI上传Nexus制品

目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI(引用系统变量) 3.添加if条件判断项目类型 4.优化GitLabCI(模板类) 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 3.GItLab Packag…

【产品经理】产品的实现,需要做好战略规划

产品的实现需要做好产品规划,而产品的规划决定了产品的方向。本文从战略规划的重要性、产品定位、设计产品架构图三个方向,详细地为大家梳理了产品实现的前期准备。 我们知晓了如何去发掘问题,并找到解决方案。 可对于问题的处理&#xff0c…

【Jeecg Boot 3 - 第二天】1.1、后端 docker-compose 部署 JEECGBOOT3

一、场景 二、实战 ▶ 2.1 修改配置文件 > 目的一:将 dev 变更为生产环境 prod > 目的二:方便spring项目调用docker同个network下的redis和mysql ▶ 2.2 编写dockerfile ▶ 2.3 编写docker-compose.yaml ▶ 2.4 打…

裸机单片机适用的软件架构

单片机通常分为三种工作模式,分别是 1、前后台顺序执行法 2、操作系统 3、时间片轮询法 1、前后台顺序执行法 利用单片机的中断进行前后台切换,然后进行任务顺序执行,但其实在…

[排序篇] 冒泡排序

目录 一、概念 二、冒泡排序 2.1 冒泡降序(从大到小排序) 2.2 冒泡升序(从小到大排序) 三、冒泡排序应用 总结 一、概念 冒泡排序核心思想:每次比较两个相邻的元素,如果它们不符合排序规则(升序或降序)则把它们交换过来。…

Web自动化测试工具起到哪些重要作用

随着互联网的迅猛发展,Web应用程序已经成为企业不可或缺的一部分。为了确保Web应用的质量和可靠性,Web自动化测试工具变得至关重要。以下是Web自动化测试工具在软件开发生命周期中发挥的作用: 1. 提高测试效率和速度 Web自动化测试工具可以快…

【媒体开发】利用FFMPEG进行推拉流

1. 下载并启动媒体服务 MediaMTX,也即之前的rtsp-simple-server,是一个即用型、零依赖的实时媒体服务器和媒体代理,允许发布、读取、代理和记录视频和音频流。 从Releases bluenviron/mediamtx GitHub找到最新版,下载对应平台…

Web UI 自动化 元素定位利器

序 元素定位,对于 Web UI 自动化而言,绝对是大家成长道路上的一道绊脚石。 很多初学者,都“死”在了元素定位上,从而失去了学习的兴趣。导致职业规划不得不半途而废~ 那么,今天,我们就使用 Katalon Stu…

python实战演练之迎接冬至的第一场雪

写在前面 WINTER IS COMING Python实现大雪纷飞的效果,完整代码在文末哦~ 准备开始 WINTER IS COMING Python是一种高级编程语言,Turtle是Python的一个图形化模块,它可以帮助学习者更好地理解编程概念,同时可以进行图形化编程。 …

DS二叉排序树之删除

Description 给出一个数据序列,建立二叉排序树,并实现删除功能 对二叉排序树进行中序遍历,可以得到有序的数据序列 Input 第一行输入t,表示有t个数据序列 第二行输入n,表示首个序列包含n个数据 第三行输入n个数据…

修改汽车的控制系统实现自动驾驶,基于一个开源的汽车驾驶辅助系统实现全自动驾驶

修改汽车的控制系统实现自动驾驶,基于一个开源的汽车驾驶辅助系统实现全自动驾驶。 自动驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,让电脑可以在没有任何人类主动的操作下,自动安全地操作机动车辆。 演示视频: Openpilot :一个开源的汽车驾…

音乐制作工具 Ableton Live 12中文最新 for Mac

Ableton Live 12 Mac具有直观的界面和强大的功能,使得音乐制作变得更加简单和高效。它支持实时录制、编辑和混音,用户可以在创作过程中随时进行修改和调整。此外,该软件还提供了各种音频效果、虚拟乐器和采样器,使用户可以创建出更…

el-table的复选框占满全格

el-table的复选框格子很小每次点击都点不到&#xff0c;又不想设置行点击&#xff0c;因为每次复制内容都会选中&#xff0c;实现效果是点击el-table的复选框单元格就可以选中 <template><div style"width: 60vw; margin: 10px;"><el-table :data&quo…

1 CPU实现的基本框图

汇编语言 && 指令格式 CPU设计的框架&#xff1a;三级流水线 ROM存放指令和数据&#xff0c;大端模式&小端模式&#xff0c;地址对齐 取指 译码&#xff1a; 执行&#xff1a; 汇编语言 & 指令格式 流水线实现工作机制 模块功能划分&接口信号 参考…

新工科:数据科学与大数据技术实验中心解决方案,赋能高校新工科数智人才培养

随着数字经济蓬勃发展&#xff0c;数字化产业和产业数字化成为就业增长新动能。据人瑞人才与德勤调研显示&#xff0c;未来3年&#xff0c;数字产业化企业最需要运营人员和开发人员&#xff08;包括大数据开发工程师、数据建模开发工程师等&#xff09;&#xff0c;其次是数据分…

12 位多通道国产芯片ACM32F403/F433 系列,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…

lv13 交叉开发环境搭建

1 ubuntu网络环境配置 目的&#xff1a;让Ubuntu可以上外网&#xff0c;让开发板可以与ubuntu互通 2 tftp 服务器环境搭建 tftp&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件 传输…

LabVIEW发开发电状态监测系统

LabVIEW发开发电状态监测系统 对发电设备的持续监测对于确保可靠的电力供应至消费者极为重要。它不仅能够及时提醒操作员注意发电设备的潜在损坏&#xff0c;还能减少由于设备故障造成的停机时间。为了达到这一目标&#xff0c;开发了一款基于LabVIEW的软件&#xff0c;专门用…

基于YOLOv8深度学习的血细胞检测与计数系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战、智慧医疗

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【UE5】监控摄像头效果(下)

目录 效果 步骤 一、多摄像机视角切换 二、摄像头自动旋转巡视 三、摄像头跟踪拍摄 效果 步骤 一、多摄像机视角切换 1. 打开玩家控制器“MyPlayerController”&#xff0c;添加一个变量&#xff0c;命名为“BP_SecurityCameraArray”&#xff0c;类型为“BP_SecurityCa…