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

文章目录

  • 一、实验目的
  • 二、实验内容
  • 三、实验过程
    • 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.mzph.cn/news/203323.shtml

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

相关文章

【Gradle】mac环境安装Gradle及配置

官网安装说明:Gradle | Installation 由于Gradle运行依赖jvm,所以事先需要安装jdk,并确认你的jdk版本和gradle版本要求的对应关系,这个官网上有说明,但是我试了一下不太准确,供参考,链接如下&a…

鸿蒙一出,android开发处境再受重创

华为宣布其自研操作系统鸿蒙HarmonyOSNEXT开发者预览版将不再兼容安卓系统,这一消息引起了广泛关注和热议。这一决策标志着华为正式告别安卓,摆脱了外部的制约,开始着手打造一个全新的生态系统。 鸿蒙系统4发布一个月,截至目前&a…

Apache Flink(七):Apache Flink快速入门 - DataStream BATCH模式

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 下面使用Java代码使用DataStream…

链路追踪详解(三):分布式链路追踪标准的演进

目录 Google Dapper Twitter Zipkin Uber Jaeger OpenTracing 和 OpenCensus OpenTelemetry 小结 分布式链路追踪是现代云计算和微服务架构中一个关键技术,可以让开发者和运维团队理解和监控服务请求在复杂系统中的完整流转路径。分布式链路追踪技术的发展经历…

C/C++,数值计算——快速幂(Quick Pow)的几种算法源代码

1 文本格式 // C Version long long binpow(long long a, long long b) { if (b 0) return 1; long long res binpow(a, b / 2); if (b % 2) return res * res * a; else return res * res; } // C Version long long binpow(long long a,…

10.Java程序设计-基于SSM框架的微信小程序家教信息管理系统的设计与实现

摘要是论文的开篇,用于简要概述研究的目的、方法、主要结果和结论。以下是一个简化的摘要示例,你可以根据实际情况进行修改和扩展: 摘要 随着社会的发展和教育需求的增长,家教服务作为一种个性化的学习方式受到了广泛关注。为了更…

nodejs微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

短视频购物系统源码:构建创新购物体验的技术深度解析

短视频购物系统作为电商领域的新宠,其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计,以揭示其如何构建创新购物体验的技术奥秘。 1. 技术架构与框架选择 短视频购物系统的源码首先考虑的是其技术架构。常见的选择…

近期复习三

目录 nginx.conf文件介绍 一.文件共享功能 1.清空html目录下文件并新建你要共享的文件 2.修改nginx.conf文件,开启autoindex功能 3.测试 二.状态模块 1.修改nginx.conf文件 2.测试 (1)使用刚才定义的IP/nginx_status进行访问 &#…

TypeScript中的单件设计模式

基本概念 (1) 了解设计模式 设计模式通俗的讲,就是一种更好的编写代码方案,打个比喻:从上海到武汉,你可以选择做飞机,做轮船,开车,骑摩托车多种方式,把出行…

Caché/M 数据库系统 InterSystems IRIS 的 Windows 安装

针对 InterSystems IRIS 数据库的一些基本概念。 InterSystems IRIS 是什么 InterSystems IRIS 是基于 Cach/M 语言开发的一个数据库,这个数据库被大量使用在医疗系统中,也是北美地区医疗系统病历和文件管理中默认使用的事实标准。 Cach/M 是什么 Ca…

德迅猎鹰(云蜜罐)有什么用

蜜罐(Honeypot)是一种安全技术,用于吸引和欺骗攻击者,以便收集关于攻击行为的信息和情报。它模拟了一个脆弱的系统、服务或网络资源,看起来对攻击者具有吸引力,但实际上是为了引诱攻击者暴露其攻击手法和意…

Django 开发 web 后端,好用过 SpringBoot ?

基础语法 Django(Python):以简洁和直观著称。它允许更快的开发速度,特别适合快速迭代的项目。例如,一个简单的视图函数: from django.http import HttpResponsedef hello_world(request):return HttpRespon…

Sprite Editor图片编辑器的使用_unity基础开发教程

Sprite Editor图片编辑器的使用 什么是Sprite Editor安装插件(3D项目)切片方式Automatic:自动切片Grid By Cell Size:按照像素大小进行切片Grid By Cell Count:按照个数进行切片Isometric Grid:等距网格切片…

电脑版便签软件怎么设置在桌面上显示?

对于不少上班族来说,如果想要在使用电脑办公的时候,随手记录一些常用的工作资料、工作注意事项等内容,直接在电脑上使用便签软件记录是比较方便的。电脑桌面便签工具不仅方便我们随时记录各类工作事项,而且支持我们快速便捷使用这…

使用Go快速开发TCP公共服务

使用Go快速开发TCP公共服务 文章目录 使用Go快速开发TCP公共服务一、前言二、实现思路三、源码四、测试使用五、最后 一、前言 之前使用的公共TCP服务无法使用了,想了一下整个实现原理不是很复杂,就利用Go快速开发了一个,利用公网服务器可以…

KD-Tree

游戏中常对物体进行空间划分,对于均匀分布的划分一般用四叉树(八叉树),动态不均匀的分布可以采用kd-tree 构建kd-tree 构建思路: 1.对节点进行各维度的方差分析,选取方差最大(即离散程度最高)的维度进行排序。取中值节点作为分…

多平台展示预约的服装小程序效果如何

线下实体服装店非常多,主要以同城生意为主,但随着电商经济增长,传统线下自然流量变少,商家们会选择线上入驻平台开店获得更多线上用户,包括自建私域小程序等。 而除了直接卖货外,线上展示预约在服装行业也…

Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式

我这边是因为业务需要将之前导出的word文档转换为PDF文件,然后页面预览下载这样的情况。之前导出word文档又不是我做的,所以为了不影响业务,只是将最后在输出流时转换成了PDF,当时本地调用没什么问题,一切正常&#xf…

HarmonyOS(十一)——初识状态管理

前言 在前文的描述中,我们构建的页面多为静态界面。如果希望构建一个动态的、有交互的界面,就需要引入“状态”的概念。 假设我们要实现如下一个动态的交互界面: 上面的示例中,用户与应用程序的交互触发了文本状态变更&#x…