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

news2024/12/23 1:27:13

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 279完全平方数 139单词拆分 卡码网 56携带矿石资源(多重背包) | 代码随想录25期训练营day45

动态规划算法6 LeetCode 279 完全平方数 2023.12.11 题目链接代码随想录讲解[链接] int numSquares(int n) {//1确定dp数组,其下标表示j的完全平方数的最少数量//3初始化,将dp[0]初始化为0,用于计算,其他值设为INT_MAX用于递推…

Django系列之Celery异步框架+RabbitMQ使用

在Django项目中,如何集成使用Celery框架来完成一些异步任务以及定时任务呢? 1. 安装 pip install celery # celery框架 pip install django-celery-beat # celery定时任务使用 pip install django-celery-results # celery存储结果使用2. Django集成…

WebRTC AEC回声消除算法拆解

WebRTC AEC算法流程分析——时延估计(一) 其实,网上有很多类似资料,各个大厂研发不同应用场景设备的音频工程师基本都对其进行了拆解,有些闪烁其词,有些却很深奥,笔者随着对WebRTC了解的深入&a…

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

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

2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现: 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此,对这一现象进行建模,特别是对其空间发生和扩展进行建模&…

[算法基础 ~排序] Golang 实现

文章目录 排序什么是排序排序的分类1. 冒泡1.1 冒泡排序1.2. 快速排序 2. 选择2.1 简单选择排序2.2 堆排序 3. 插入3.1 直接插入3.2 折半插入3.3 希尔排序 4. 归并排序代码实现 5. 基数排序 排序图片就不贴了吧 排序 什么是排序 以下部分动图来自CSDN ::: tip 稳定性的概念 …

网络测试工具:tcping-测试端口连接

网络测试工具:tcping-测试端口连接 平常使用的ping,是通过icmp协议去测试网络连通性的,tcping是通过tcp三次握手测试端口的连通性。总的来说,ping测试的是L3的连通性,tcping测试的是L4的连通性。 tcping工具下载 htt…

Go语言学习:第1天

一、为什么开始学go语言 我自己是做测试的,所测试项目使用的是go语言。开始学习go语言的原因有两个:一方面,为了更好的做好工作; 另一方面,为了提高自己的核心竞争力。 二、第1天学习到的内容 2.1 Go是怎么解决包依…

打包less

接HTML和css之后对less进行打包 1.在之前的文件夹里的src文件夹创建一个less文件 2.打开webpack——>中文文档——>Loader——>less—loader 3.复制下图代码到终端 4.复制下图内容到webpack.config.js脚本 5.在src里的js文件年引入less文件 6.在终端运行 npm run te…

[原创]如何正确的部署R语言开发环境(含动图演示).

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

arm-linux设备fsck命令移植

arm-linux设备fsck命令移植 文章目录 **arm-linux设备fsck命令移植**1、下载e2fsprogs-源码2、解压3、进入源码目录4、配置编译环境:使用以下命令配置交叉编译环境5、测试 1、下载e2fsprogs-源码 首先要确定自己的文件系统格式,IG2000的文件系统是ext4&…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含python、JS工程源码)+数据集+模型(四)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存1)模型训练2)模型保存 4. 上传结果1)…

【AI】ChatGLM3-6B上手体验

之前写过ChatGLM2-6B大语言模型的部署安装文档,现在ChatGLM模型已经更新迭代到第三代了,从官方公布的数据来看,模型的能力是得到了进一步的增强。 这次写文章主要是来记录一下使用过程,方便回头查看。 ChatGLM3-6B官方的视频教程…

VSCode中如何查看EDI报文?

VSCode是开发人员常用的一款软件,为了降低EDI报文的阅读门槛,知行的开发人员设计了EDI插件,可以在VSCode中下载使用。 如何打开一个EDI报文——VSCode EDI插件介绍 EDI插件下载流程 进入VSCode,打开Extensions,在搜索…

STM32-01-认识单片机

文章目录 一、单片机简介二、Cortex-M系列介绍三、初识STM32四、STM32原理图设计五、搭建开发环境六、STM32初体验七、MDK5使用技巧 一、单片机简介 单片机是什么? 单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电…

Keepalived+Nginx实现高可用(上)

一、背景与简介 为了服务的高可用性,避免单点故障问题,通常我们使用"冗余设计思想"进行架构设计。冗余设计思想,本质就是将同一个应用或者服务放置在多台不同的服务器上[鸡蛋不放在同一个篮子里],这样减少整体服务宕机的…

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题 目录 任务 1 网络平台搭建(50 分) 任务 2 网络安全设备配置与防护(250 分) 模块二 网络安全事件响应、数字取证调查、应用程序安…

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置(Auto-Configuration) 2. 起步依赖(Starter Dependencies) 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…

散点图直方图折线图的替代

散点图直方图折线图的替代 seaborn官网 数据科学数据可视化,散点图 直方图 折线图的新方法 1.hexbinplot https://seaborn.pydata.org/examples/hexbin marginals.html相当于散点图做了聚合/分箱,使数据的分布展示更明显。Library: seaborn 2.瀑布图展示…

Pytorch-LSTM轴承故障一维信号分类(一)

目录 前言 1 数据集制作与加载 1.1 导入数据 第一步,导入十分类数据 第二步,读取MAT文件驱动端数据 第三步,制作数据集 第四步,制作训练集和标签 1.2 数据加载,训练数据、测试数据分组,数据分batch…