Python OpenCV 入门 这篇就够了

目录

1.初步认识OpenCV

1.1OpenCv概述

1.2OpenCV模块

2.图像处理的基本操作

2.1 imread()方法读取图像

2.2 显示图像

2.2.1 imshow()方法显示图像

2.2.2 waitKey()方法设置按键事件

2.2.3 destroyAllWindows()方法销毁所有窗口

3.3 imwrite保存图像

3.4 获取图像属性

3.4.1 shape属性获取图像的形状

3.4.2 size属性获取图像的大小

3.4.3 dtype属性获取图像的大小


1.初步认识OpenCV

1.1OpenCv概述

OpenCV(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,由英特尔公司研发。OpenCV使用C++语言编写,但也提供了Python、Java和MATLAB等语言的接口,这使其在各种编程语言中都能得到广泛应用。同时,OpenCV支持Windows、Linux、Android和Mac OS等多个操作系统,具有良好的跨平台性能。

OpenCV的主要功能包括图像处理和计算机视觉。图像处理主要关注于对图像的处理操作,如增强、还原、去噪、分割等。而计算机视觉则更侧重于使用计算机来模拟人的视觉,这是计算机视觉领域的最终目标。OpenCV实现了图像处理和计算机视觉方面的很多通用算法,因此已成为计算机视觉领域最有力的研究工具。

1.2OpenCV模块

OpenCV模块是指OpenCV库中的各个功能组件或子库,这些模块提供了丰富的计算机视觉和图像处理功能。以下是一些常见的OpenCV模块及其功能概述:

  1. Core模块:这是OpenCV的基础模块,包含了一些基本的数据结构和函数,如图像矩阵(cv::Mat)、动态数据结构、绘图函数、数学函数等。

  2. Imgproc模块:这个模块包含了大多数图像处理功能,如滤波、色彩空间转换、直方图、特征检测、图像变换等。

  3. Video模块:这个模块包含了一些视频分析功能,如光流法、背景/前景分割、摄像头标定、视频稳定等。

  4. Features2d模块:这个模块主要用于特征检测和描述,如SIFT、SURF、ORB等算法,以及特征匹配和几何变换等。

  5. HighGui模块:这个模块提供了用户界面功能,如窗口显示、鼠标事件处理、图像保存和加载等。

  6. VideoIO模块:这个模块负责视频的读取和写入,支持多种视频文件格式。

  7. Calib3d模块:这个模块主要用于相机标定、三维重建和立体视觉等功能。

  8. Objdetect模块:这个模块包含了一些目标检测算法,如人脸检测、行人检测、文本检测等。

2.安装OpenCY

pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

3.图像处理的基本操作

3.1 imread()方法读取图像

image = cv2.imread(filename, flags)

filename:要读取的图像文件的名称,包括路径和扩展名。

flags:这是一个可选参数,用于指定读取图像的方式。常用的标志有:

  1. cv2.IMREAD_COLOR:以彩色图像模式读取图片(默认值,等价于 flags=1)。
  2. cv2.IMREAD_GRAYSCALE:以灰度模式读取图片(等价于flags=0)。
  3. cv2.IMREAD_UNCHANGED:包括 alpha 通道(等价于 flags=-1)。

3.2 显示图像

3.2.1 imshow()方法显示图像

cv2.imshow(winname, mat)

winname 是窗口名称,mat 是要显示的图像。这个函数没有返回值,但它会在指定的窗口中显示图像。 

3.2.2 waitKey()方法设置按键事件

主要作用是等待用户按下某个键,并返回该按键的 ASCII 码值。这个函数在图像处理的过程中经常被用来实现按键控制,例如通过按下特定的键(如 Esc 键)来退出程序

3.2.3 destroyAllWindows()方法销毁所有窗口

示例:

import cv2  # 读取图像  
image = cv2.imread('path_to_image.jpg')  # 显示图像  
cv2.imshow('Image', image)  # 等待用户按键  
cv2.waitKey(0)  # 关闭所有窗口  
cv2.destroyAllWindows()

3.3 imwrite保存图像

cv2.imwrite(filename, img, [params])
  1. filename:要写入的文件的名称,包括路径和文件扩展名。
  2. img:要保存的图像,通常是一个NumPy数组。
  3. params:一个可选参数,用于指定图像编码的参数。在大多数情况下,可以省略这个参数。
  4. imwrite函数返回一个布尔值,如果图像成功写入文件,则返回True;如果写入失败,则返回False

示例:

import cv2  # 读取图像  
image = cv2.imread('input.jpg')  # 对图像进行一些处理...  
# 例如,我们可以将图像转换为灰度  
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 将处理后的图像写入新的文件  
cv2.imwrite('output.jpg', gray_image)

首先使用cv2.imread函数读取一个名为input.jpg的图像文件。然后,我们使用cv2.cvtColor函数将图像转换为灰度图像。最后,我们使用cv2.imwrite函数将处理后的灰度图像写入到名为output.jpg的新文件中。 

3.4 获取图像属性

3.4.1 shape属性获取图像的形状

示例:

import cv2  # 读取彩色图像  
color_image = cv2.imread('color_image.jpg')  
print("彩色图像的形状:", color_image.shape)  # 输出: (高度, 宽度, 通道数)  # 读取灰度图像  
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)  
print("灰度图像的形状:", gray_image.shape)  # 输出: (高度, 宽度)

3.4.2 size属性获取图像的大小

示例:

print("彩色图像的大小:", color_image.size)  # 输出: 高度 * 宽度 * 通道数  
print("灰度图像的大小:", gray_image.size)  # 输出: 高度 * 宽度

3.4.3 dtype属性获取图像的大小

示例:

print("彩色图像的数据类型:", color_image.dtype)  # 输出: uint8  
print("灰度图像的数据类型:", gray_image.dtype)  # 输出: uint8

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

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

相关文章

springboot/ssm招投标系统Java在线招投标项目专家管理系统

springboot/ssm招投标系统Java在线招投标项目专家管理系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7&am…

【OrangePi Zero2 智能家居】智能家居项目的软件实现

一、项目整体设计 二、项目代码的前期准备 三、实现语音监听接口 四、实现socket监听接口 五、实现烟雾报警监听接口 六、实现设备节点代码 七、实现接收消息处理接口 一、项目整体设计 整体的软件框架大致如下: 整个项目开启4个监听线程, 分别是&…

【洛谷 P3367】【模板】并查集 题解(并查集)

【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N , M N,M N,M ,表示共有 N N N 个元素和 M M M 个操作。 接下来 M M M 行,每行包含三个整数 Z i , X i , Y i Z_i,X_i,Y…

为什么有些人喜欢回答问题答非所问?为什么有些人的处事风格是热情、礼貌、一问三不知的人?

问题描述:为什么有些人喜欢回答问题答非所问?为什么有些人的处事风格是热情、礼貌、一问三不知的人? 问题解答: 有些人喜欢回答问题答非所问可能有几种原因: 缺乏知识或技能:有些人可能不了解问题的答案&…

奇异值分解(SVD)

对于一个方阵而言,采用的是特征分解,参考《矩阵特征值分解(EVD)-CSDN博客》

高程 | 数据的共享与保护(c++)

文章目录 📚标识符的作用域与可见性🐇作用域🐇可见性 📚对象的生存期🐇静态生存期🐇动态生存期 📚类的静态成员🐇静态数据成员🐇静态函数成员 📚类的友元&…

你的电脑关机吗

目录 程序员为什么不喜欢关电脑? 电脑长时间不关机会怎样? 电脑卡顿 中度风险 硬件损耗 能源浪费 散热问题 软件问题 网络安全问题 程序员为什么不喜欢关电脑? 大部分人都会选择将电脑进行关机操作。其实这不难理解,毕竟人类都需要…

MyBatis篇----第五篇

系列文章目录 文章目录 系列文章目录前言一、MyBatis 实现一对一有几种方式?具体怎么操作的?二、MyBatis 实现一对多有几种方式,怎么操作的?三、Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?四、Mybatis 的一级、二级缓存前言 前些天发现了一个巨牛的人工智能…

每日一题 KY11 二叉树遍历

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后&…

【数据库_MySQL】MySQL彻底卸载

程序员为什么不喜欢关电脑? 你是否注意到,程序员们似乎从不关电脑?别以为他们是电脑上瘾,实则是有他们自己的原因!让我们一起揭秘背后的原因,看看程序员们真正的“英雄”本色! 卸载 要是你的…

【机器学习案例3】从科学论文图片中提取标题、作者和摘要【含源码】

在这个项目中,我的目标是从科学论文图片中提取某些部分(标题、作者和摘要)。预期提取部分是科学论文中常见的部分,例如标题、摘要和作者。输入与最终结果。我的输入是将第一页纸转换成图像。最终结果是一个 txt 文件,其中包含标题、作者和摘要部分,如下图1和图2所示。我将…

SpringBoot整合第三方技术-缓存

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

每日OJ题_递归①_力扣面试题 08.06. 汉诺塔问题

目录 递归算法原理 力扣面试题 08.06. 汉诺塔问题 解析代码 递归算法原理 递归算法个人经验:给定一个任务,相信递归函数一定能解决这个任务,根据任务所需的东西,给出函数参数,然后实现函数内容,最后找出…

CodeForces Round 925 Div.3 A-F 题解

文章目录 A题目AC Code: B题目AC Code: C题目AC Code: D题目AC Code: E题目AC Code: F题目AC Code: A 题目 此题尽量让后面的更大,前面的更小。 我们尽量让第 3 3 3 位更大,如果…

AI定胜负?微软云Azure规模“快速赶上”亚马逊云AWS

AI技术搅动云计算格局。 据媒体报道,有分析数据表示,微软Azure云业务规模已经达到亚马逊AWS云业务规模的四分之三,而在五年前,Azure规模仅为AWS的一半。 得益于人工智能热潮和与Open AI的合作,微软Azure云业务最新财…

冒泡排序平均需要跑多少趟:拉马努金Q函数初探

摘要: 拉马努金Q函数在算法分析中的应用,初步体验 【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】 我的网站:潮汐朝夕的生活实验室 我的公众号:算法题刷刷 我的知乎&#x…

100条经典C语言题第一天(1-10)

准备复习一下C语言,刷一些和面试相关的问题。 请填写 bool, float, 指针变量 与 “零值”比较的if语句 A.Bool flag 与 “零值”比较的if语句 1为true 0为false 分析 这里的flag 是布尔类型的变量 标准…

YOLOv5改进 | 一文汇总:如何在网络结构中添加注意力机制、C3、卷积、Neck、SPPF、检测头

一、本文介绍 本篇文章的内容是在大家得到一个改进版本的C3一个新的注意力机制、或者一个新的卷积模块、或者是检测头的时候如何替换我们YOLOv5模型中的原有的模块,从而用你的模块去进行训练模型或者检测。因为最近开了一个专栏里面涉及到挺多改进的地方,不能每篇文章都去讲…

linux内核原理--用户态线性地址空间,mmap,malloc,缺页异常

1.概述 前面我们介绍了内核态线性地址空间划分,及在内核态运行时,如何利用伙伴系统完成连续可用物理页框申请和释放。如何利用小块内存分配器实现高效的动态内存分配和释放。如何利用vmalloc,vfree完成线性地址连续但物理地址不连续的多个页框…