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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniCloud(一) 新建项目、初始化服务空间、云对象访问测试

一、新建一个带有unicloud 二、创建一个服务空间 1. 右键uniCloud,关联云服务空间 我当前没有服务空间,需要新建一个服务空间,之后将其关联。初始化服务空间需要的时间有点长 服务空间初始化成功后,刷新HBuilder,勾选…

极狐GitLab CI/CD 变量黑魔法之预定义变量

目录 预定义变量 commit 相关 Job 相关 Pipeline 相关 镜像仓库有关 极狐GitLab CI/CD 变量是指一系列的环境变量,用来帮助我们控制 CI/CD Job 或 Pipeline 的行为,存储一些可以复用的信息,避免在 .gitlab-ci.yml 中形成硬编码。 极狐G…

Citespace、vosviewer、R语言的文献计量学可视化分析

文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量化的综合性知识体系。特别是,信息可视化技术手段和方法的运用,可直观的展示主题的研究发展历程、研究现状、研究…

【后端学前端】第二天 css动画 动感菜单(css变量、过渡动画、过渡延迟、js动态切换菜单)

目录 1、学习信息 2、源码 3、变量 1.1 定义变量 1.2 使用变量 1.3 calc() 函数 4、定位absolute和fixed 5、transform 和 transition,动画 5.1 变形transform 5.2 transition 5.3 动画animation 6、todo 1、学习信息 视频地址:css动画 动感菜…

111. 二叉树的最小深度

目录 解法: 官方解法: 方法一:深度优先搜索 思路及解法 复杂度分析 时间复杂度: 空间复杂度: 方法二:广度优先搜索 思路及解法 复杂度分析 时间复杂度: 空间复杂度: 给定…

MyBatis:缓存

MyBatis 缓存一级缓存二级缓存注 缓存 缓存,是数据交换的缓冲区(临时保存数据的地方)。即将数据(数据一般为频繁查询且不易改变)保存在计算机内存中,下次读取数据时直接从内存中获取,以避免频繁…

Word插件-好用的插件-批量插入图片-大珩助手

现有100张图片,需要批量插入word中,并在word中以每页6张图片的形式呈现,请问怎样做? 使用word大珩助手,多媒体-插入图片,根据图片的长宽,选择连续图片、一行2个图或一行3个图,可一次…

Network 灰鸽宝典【目录】

目前已有文章 11 篇 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 canvas理论基础canvas高级应用示例canv…

开箱即用的C++决策树简单实现

一个数据结构期末作业(有兴趣用的话可以高抬贵手star下⭐~)GitHub - mcxiaoxiao/c-Decision-tree: 决策树c简单实现 🌳 c-Decision-tree 附大作业/课设参考文档.doc 🌳 c-Decision-tree Introduction 🙌 c-Decision…

Java架构师系统架构提升扩展性

目录 1 导语2 架构扩展性-应用扩展3 架构扩展性-数据扩展4 组织可扩展性5 流程可扩展性6 多快好省-扩展性实现方案7单体应用从数百节点到数万节点的扩展历程8 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语 理解业务需求,对未来的业务发展有清晰的预见性。…

Spring Boot监听redis过期的key

Redis支持过期监听&#xff0c;可以实现监听过期数据&#xff0c;实现过程如下 1、pom依赖 <!-- Redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></depend…

Docker基础概念解析:镜像、容器、仓库

当谈到容器化技术时&#xff0c;Docker往往是第一个被提及的工具。Docker的基础概念涵盖了镜像、容器和仓库&#xff0c;它们是理解和使用Docker的关键要素。在这篇文章中&#xff0c;将深入探讨这些概念&#xff0c;并提供更丰富的示例代码&#xff0c;帮助大家更好地理解和应…