OpenCV for Python 入坑第一天:图像的基础操作

news2024/12/26 23:27:06

我们都知道,OpenCV能够帮助我们处理视频和图像,咱们在图像处理中,除了Pillow库之外,最经常用到的也是它了。那么现在咱们就正式入坑OpenCV for Python,一起来感受一下OpenCV的魅力吧!

文章目录

  • 读取图像 imread()
  • 展示图片 imshow()
  • 等待按键 waitKey()
  • 保存图像 imwrite()

读取图像 imread()

OpenCv提供了一种cv2.imread的方法来读取图像。记忆方法也很简单image+read=imgread。我们可以使用这个函数读取多种静态图像。

一般来说,我们在括号内加入我们所要读取图片的地址就可以了。这个地址既可以是计算机的绝对地址,也可以是相对于咱们程序所在地的相对地址

除此之外呢,我们还有一个可选的参数,对于普通的开发者来说,平时一般并不会用到这样的参数传入。那么这里咱们就简单介绍几个,详细内容大家可以看看OpenCV官网。

  1. cv2.IMREAD_UNCHAGE
    顾名思义,这个参数就是咱们保持图像原格式不变,它所对应的数值是-1,也就是说,在传参的时候,我们既可以传上面的那么一大串英文字母,也可以传-1这个值。我们要注意的是,当我们不传参的时候,OpenCV会直接将我们的图片调整成为3通道的BGR图像

    BGR通常是指一种颜色表示方式,即以蓝色(Blue)、绿色(Green)、红色(Red)的顺序来描述图像或像素的颜色值。在计算机图形学、计算机视觉、数字图像处理等领域常常使用BGR表示颜色,也是OpenCV等计算机视觉库中默认的颜色表示方式。

    如果我们是在OpenCV中处理的话,出于对兼容性和实现的方便考虑,咱们使用BGR的图像可能会更方便一些。

  2. cv2.IMREAD_GRAYSCALE
    在使用程序时,我们可能会要对图片进行灰度处理。灰度处理是将彩色图像转为灰度图像的过程。灰度图像只有一个通道,代表亮度信息,而彩色图像有3个通道,分别代表红、绿、蓝三种颜色,每种颜色的亮度信息不同。那么我们也可以使用数值0传入。

    灰度处理的意义主要有以下几点:

    1. 简化图像:把彩色图像转为灰度图像,可以降低图像的复杂度,减少计算量,方便后续算法的实现。

    2. 分析物体:对于一些物体的特征,如纹理、形状、边缘等,可以通过灰度图像来提取和分析,比如在图像识别、目标跟踪、行人检测等方面被广泛应用。

    3. 去除噪声:在一些图像处理任务中,如图像增强、去噪等,通过灰度处理可以更好地去除图像的噪声,从而提高图像质量。

    也就是说,我们只需要几行代码就能完成灰度值的一个转换。

    import cv2
    
    img = cv2.imread("./1234.jpg",0)
    cv2.imwrite("test.jpg",img)
    

    在这里插入图片描述

  3. cv2.IMREAD_REDUCED_COLOR(GRAYSCALE)_2(4/8)

    这一行代码则是减小我们图片的大小。我们可以选择缩小的倍数(即上面的数字);同时也可以选择我们将图片设置成灰白还是彩色的。灰色我们就设置GRAYSCALE,若是彩色我们就设置COLOR

    比如说我想得到一张黑白缩小8倍的图片,我们将使用以下代码就可以一步搞定。我们可以非常明显地看到其中的差异

    import cv2
    
    img = cv2.imread("./1234.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
    cv2.imwrite("test.jpg",img)
    

    在这里插入图片描述


那么我们现在就来观察一下我们读取图像之后的输入吧!可以看到程序输出了部分像素值哦~
在这里插入图片描述

展示图片 imshow()

在OpenCV中,我们有多种创建窗口的方法。我们就挑选最简单也是最常用的一种方法进行讲解。需要注意的是,OpenCV库本身并不支持中文显示,咱们标题必须改成英文进行显示。(虽然网上有些方法可以用encode()方法将文本转换成为UTF-8,但是根据本人实操发现这种方法并不可行)

咱们用的函数叫做 imshow()这个方法可以打开一个新的窗口,并在窗口中显示我们所打开的图片,这个方法非常好用,我们只需要传入两个参数。

  • 窗口名称
  • 显示图片
import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imshow("LuoFuMountain",img)
cv2.waitKey()

在这里插入图片描述

在使用这个方法时,它的底层逻辑是这样的:首先先创建一个指定名称的窗口,然后将图片显示在刚刚创建的窗口内。需要注意的是,这两个参数(名称与图片)都是必须导入的,否则会引起程序的报错哦~

等待按键 waitKey()

如果上一个实例没有最后一行的话,我们会看到窗口一闪而过,根本看不到任何界面。那么这个时候,我们可以等待用户的键盘输入,这样我们就可以让用户看清楚想要展示的界面了~

那么这个函数是waitKey()这个函数会等待键盘上的按键按下,当按下后,它会返回按下的键,这个时候我们可以根据返回值进行进一步的判断。我们要注意的是,返回值是ASCLL码,所以我们要了解想要获得的按键所对应的ASCLL。如果不想记这些特殊的编码,我们可以使用Python提供的ord()方法进行转换就可以了~

那么除此之外,我们还可以设置等待时间。当我们传入的值是负值或零的时候。表示无限等待,除此之外,我们将会等待以毫秒为单位的传入的数字。

import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imshow("LuoFuMountain",img)
return_key = cv2.waitKey()

if return_key == ord("a"):
	cv2.imshow("PRESS A",img)
elif return_key == ord("b"):
	cv2.imshow("PRESS B",img)

cv2.waitKey()

在这里插入图片描述

同时我们还要注意大小写哈~OpenCV对大小写的要求也是十分严格的呢

我们还可以使用print()来查看我们WaitKey()的等待期间。我们可以发现,当我们在执行Waitkey()时,整个程序处于静止状态,当我们按下键盘上的按键后,程序才得以进行,并在控制台上输出了我们想要其输出的文字。

import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imshow("LuoFuMountain",img)
return_key = cv2.waitKey()

if return_key == ord("a"):
	cv2.imshow("PRESS A",img)
elif return_key == ord("b"):
	cv2.imshow("PRESS B",img)

cv2.waitKey()
print("第二次触发按键")

在这里插入图片描述

保存图像 imwrite()

OpenCV和其他程序不一样的地方在于,我们保存不再是使用save()这样的函数,而是一个叫做imwrite()的函数。这个函数有两个必需参数和一个选填参数。

  • filename
    保存的路径,既可以是相对路径也可以是绝对路径
  • img
    保存图像的代码文件
  • params
    一个保存类型的参数,一般并不会用到
import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imwrite("./GrayScale_LFS.jpg",img)

在这里插入图片描述

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

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

相关文章

深入了解Redis-基础篇

文章目录 一、故事背景二、知识点主要构成2.1、redis简介2.2、基于CentOS Linux docker容器化安装redis2.3、redis的数据类型2.3.1、String类型2.3.2、Hash类型2.3.3、List类型2.3.4、Set类型2.3.5、SortedSet类型 2.4、Redis的Java客户端2.4.1、Jedis2.4.1.1、Jedis的使用步骤…

leetcode 572. 另一棵树的子树(java)

另一棵树的子树 另一棵树的子树题目描述解法一 DFS解法二 KMP 算法 KMP 算法 另一棵树的子树 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/subtree-of-another-tree 题目描述 给你两棵二叉树 root 和 subRoot 。检验 …

脑电微状态方法可靠吗?

摘要 EEG微状态是在静息态EEG记录中观察到的代表功能性脑网络的状态,在快速切换到另一个网络之前保持稳定40-120ms。人们认为微状态特征(如持续时间、发生率、覆盖率和转换概率)可以作为精神和神经系统疾病以及心理社会特征的神经标志物。然而,需要可靠…

设计模式-01策略模式

1 什么是设计模式 先看一段设计模式总结之父们GOF在《设计模式 可复用面向对象软件的基础》一书中描述的一段话: 设计模式就是程序编码设计时的一些套路,这些套路都是经过前人千锤百炼总结出来的经验,由GoF总结出23种经典套路,即…

4028: 按位与

题目内容 输入格式 输入第一行一个整数 n n n。 第二行 n n n 个整数 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots, a_n a1​,a2​,⋯,an​。 输出格式 输出一行一个整数表示答案。 样例 1 输入 5 6 2 3 4 7 样例 1 输出 7 #include<bits/stdc.h> using namespace std…

怎样优雅地增删查改(三):业务用户的增删查改

文章目录 创建业务用户创建业务用户同步器创建业务用户应用服务增删改查 创建控制器测试按组织架构查询按职称查询 创建业务用户 区别于身份管理模块&#xff08;Identity模块&#xff09;的鉴权用户IdentityUser&#xff0c;业务用户&#xff08;BusinessUser&#xff09;是围…

【Python】正则表达式语法入门

目录 正则表达式 1、点&#xff1a;匹配所有字符 2、星号&#xff1a;重复匹配任意次 3、加号&#xff1a;重复匹配多次 4、花括号&#xff1a;匹配指定次数 5、贪婪模式和非贪婪模式 6、反斜杠&#xff1a;对元字符的转义 7、方括号&#xff1a;匹配几个字符之一 8、…

计算机科学与技术基础课程复习

文章目录 大学计算机基础 大学计算机基础 国防科技大学慕课 从算牌开始&#xff0c;记录数据 数据的计算规则 帕斯卡的加法器 计算自动化 图灵的梦想 乘10运算的图灵机 图灵记 根据状态和记录&#xff1b;根据控制器规则&#xff0c;从起始状态到结束状态&#xff0c;从…

less 笔记

1 margin-left 之后有 margin: 0 导致margin-left 无效 --> 不能重复定义 .btn-group {margin-left: calc(100% - 350px);display: inline-block;margin: 0; // 重复定义 导致上面 没有效果padding: 0; } 2 一定要F12检查元素 看各个div的宽度是否太长 导致靠左靠右 计算不…

5.1 Python高阶特性之递归函数

基本概念&#xff1a; 如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数使用递归函数的优点是逻辑简单清晰&#xff0c;缺点是递归过深会导致栈溢出。【注意】 递归函数定义时&#xff0c; 一定存在某个条件能结束执行&#xff0c; 递归最重要的就是需要避免死…

免费使用Elasticsearch官网15天

注册登录 点击创建索引时候会给你展示一个密钥。这个密钥就是你的用户密码 如下图 你的服务地址大致样式如下 https://huihai.es.us-central1.gcp.cloud.es.io 这里需要你输入用户密码,上面图4&#xff08;图中&#xff09;&#xff0c;下载时候的用户密码 登录完成 这样就能…

【Python爬虫】CSDN热榜文章热门词汇分析

&#x1f4da; 前言 在信息时代&#xff0c;我们经常需要从大量的文章中获取有用的信息。本文将介绍如何使用Python进行数据处理&#xff0c;获取热榜文章的标题和标签&#xff0c;并使用jieba库进行数据分析。通过本文的学习&#xff0c;你将掌握获取和分析热榜文章数据的技巧…

[英语单词] components;

*[kәm’pәunәnt] n. 元件, 组件, 成分 a. 组成的, 构成的 【计】 组件 【化】 组分 【医】 成分; 组元(神经元组) 有很多地方使用这个单词&#xff0c;在组成整体时&#xff0c;作为单位一内的占有比率。那为什么不用portion&#xff1f; 这样每一个组成部分都是一个compon…

使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第 1 部分-介绍和设置

示例:图像上的对象检测 介绍 实时视频中的目标检测和跟踪是计算机视觉的一个重要领域,在监控、汽车和机器人等各个领域都有广泛的应用。 由于需要能够识别和跟踪对象、确定其位置并对它们进行实时分类的自动化系统,对视频帧中的实时对象检测和跟踪的需求日益增加。 在这…

疫情防控【并查集,离线查询,依次删除节点逆向转化为逐渐添上节点】

5 5 3 1 2 1 3 1 5 2 5 3 4 4 3 1 3 1 4 2 3 5 3 3 4 2 3 3 5 1 3 2 3 2 5 3 4输出样例: 1 2 3#include <bits/stdc.h> using namespace std; const int M1e35; const int N2e55; vector<int> e[N]; #define pii pair<int,int> vector<pii> query[M];…

day26 求一段连续子数组之和的最大值

题目描述 方法一&#xff1a;超出时间限制 思路&#xff1a;选一个起点&#xff0c;选一个终点&#xff0c;计算起点到终点的和&#xff1b;求max&#xff1b; 起点几种可能&#xff1a;0 到 size -1; 终点&#xff1a; 起点 到 size -1&#xff1b; int maxSubArray(int* nu…

【网站 全选和单选】js 实现-点击全选按钮时,所有的按钮都会被选中或取消选中。

要实现的效果如图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…

【基本绘图注释函数】——MatLab画图

目录索引 title&#xff1a;ylable&#xff1a;legend&#xff1a; title&#xff1a; 在绘图中添加标签。此类函数的输入是一个字符串。MATLAB 中的字符串是用双引号 (") 引起来的。 上面一部分画图代码这里省略 title("Sample Mass")ylable&#xff1a; 为y轴…

BUUCTF-EasyLogin

这是一道 Node.js 语言的题目&#xff0c;在此记录我在做这道题的思考过程。 这道题考的是 CVE-2022-23540. 简单测试 进入题目环境&#xff1a; 一个登录页面&#xff0c;由题目的名称 EasyLogin&#xff0c;我猜测这道题是身份认证缺陷的问题。不过&#xff0c;还是下意识测…

用主流编程语言解小学题

最近在网上刷到一个视频&#xff0c;内容是奶奶有60 元钱&#xff0c;去超市买了10元水果&#xff0c;收营员应该找奶奶多少钱?我一开始反应就是50元&#xff0c;后来想了想题干里没有说明这60元是怎么构成的&#xff0c;有可能是一张50元和一张10元&#xff0c;或者是3张20元…