首页 > 其他分享 >Opencv学习笔记(1)

Opencv学习笔记(1)

时间:2023-11-28 15:47:38浏览次数:27  
标签:img cv2 笔记 学习 Opencv 灰度 图像 pip 255

1、安装环境

 如何安装Python解释器和PyCharm,这里就不说明了,

参考文章链接:https://blog.csdn.net/weixin_72959097/article/details/130226675

下面主要说明在配置好开发环境后,Opencv是如何安装的。

 首先,创建一个新项目,创建一个main.py的代码文件。

在下面的命令窗口,选择终端窗口,然后打开本地窗口输入

1 pip list

按回车后,就可以显示出当前已经安装的库。这三个库都是默认安装的库,除此之外,我们还发现弹出了两段黄色的字,这个一个警告,意思是说 pip 出了新版本了,而我们还在用老版本,要按它的的提示去升级到最新版本。

1 python.exe -m pip install --upgrade pip

执行升级命令后,看到 Successfully 就表示升级成功了。

接下来安装图像处理的的 opencv-python 库,继续在光标闪烁处,输入

pip install opencv-python<4.6 -i https://mirror.baidu.com/pypi/simple

后按回车,就会自动安装好 opencv-python 这个第三方库了。

继续在光标闪烁处输入:

1 pip list

可以看到除了之前那三个库,现在多了 opencv-python 和 numpy 库了,表示我们安装成功了。

2、Opencv中图像的存储格式

先了解一些图像的基本知识:

(1)图像是由像素构成的,一个像素就是图片上的一个点。

(2)常见的图像有1通道(灰度图)、3通道(彩色图)、4通道(透明图),每个通道的像素值范围是[0,255],彩色图是我们最常见的,意思是每个像素由B、G、R三个值组成(也就是三原色),比如(255,255,255)表示白色。

(3)二值图像:图像中每个像素的灰度值仅可取0或1,即不是取黑,就是取白,二值图像可理解为黑白图像。

         灰度图像:图像中每个像素可以由0-255的灰度值表示,具体表现为从全黑到全白中间有255个介于中间的灰色值可以取

         彩色图像:每幅图像是由三幅灰度图像组合而成,依次表示红绿蓝三通道的灰度值,即我们熟知的BGR(RGB),此时彩色图像可以视为三维的[height,width, 3],也即相当于有三层,从上到下分别是blue, green和red。

        HSV图像:HSV图显示也是彩色的,HSV图是三通道图像,其三个通道如下:H,色彩或者色度,取值0-179;S,饱和度,取值为0-255;V,亮度,取值为0-255。

3、Opencv的基本操作

3.1 读取图像

语法:cv2.imread(filepath,flags)读进来图片直接是BGR格式

cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道

cv2.IMREAD_GRAYSCALE:读入灰度图片

cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道

1 cv2.imread(filepath,flag)
# 第一个参数为文件夹内图片或者其他文件夹的图片的绝对路径,注意:其中路径内的斜杠一定为/或者\\
# 文件路径(相对路径和绝对路径),路径中不要带有中文。

# 第二个参数是一个标志,用来表示该张图片以何种方式被读取
含义 数值
保持原格式不变 -1
灰度图像 0
BGR 1
图像深度为16 or 32 返回灰度图像,否则转换为8位图像 2
以任何可能颜色格式读取图像 4

3.2 显示图像

语法:cv2.imshow(window_name,image)

window-name:显示图像的窗口的名字

image             :  要显示的图像,窗口大小自动调整为图片大小。

注意:该函数一般和cv2.waitKey()cv2.destroyAllWindows()cv2.destroyWindow()一起使用。

cv2.waitKey()函数是键盘绑定函数,等待键击任意键或指定键继续程序。

cv2.destroyAllWindows()用于销毁全部窗口(从内存中清除)

cv2.destroyWindow()销毁指定窗口(从内存中清除)。

3.3 保存图像

语法:cv2.imwrite(filename,image[,params])

将图像保存到指定文件。filename:文件名,img:要保存的图像,params:格式特定参数编码

4、应用例子

下载的可用图片:

 将下载的图片命名为nv.png,并放在新建的main.py文件夹内,代码如下:

 1 import cv2
 2 
 3 fn = "nv.png"
 4 # if __name__ == '__main__':
 5 print('loading %s' % fn)
 6 img = cv2.imread(fn)      # 读取图像,可以使用CV2模块中的imread()函数来读取图像,并将其存储为numpy数组。
 7 sp = img.shape
 8 print(sp)
 9 
10 # 获取图像大小
11 sz1 = sp[0]
12 sz2 = sp[1]
13 print('width:%d\nheight:%d' % (sz2, sz1))
14 # 创建一个窗口显示图像
15 cv2.namedWindow('img')
16 cv2.imshow('img', img)
17 # 复制图像矩阵,生成与源图像一样的图像,并显示
18 myimg2 = img.copy();
19 cv2.namedWindow('myimg2')
20 cv2.imshow('myimg2', myimg2)
21 
22 # 复制并转换为灰度化图像并显示
23 myimg1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
24 cv2.namedWindow('myimg1')
25 cv2.imshow('myimg1', myimg1)
26 cv2.waitKey()
27 cv2.destroyAllWindows()

结果显示:

标签:img,cv2,笔记,学习,Opencv,灰度,图像,pip,255
From: https://www.cnblogs.com/Zhouce/p/17861558.html

相关文章

  • 秦疆的Java课程笔记:44 流程控制 打印三角形及Debug
    作业:打印5行三角形这是我写的:publicclassTestDemo1{publicstaticvoidmain(String[]args){intline=5;//定义总行数linefor(inti=1;i<=line;i++){//i是循环输出每一行for(intj=1;j<=line-i;j++){//j......
  • Linux学习 文件管理
    一、文件系统的层次模型1、文件系统模型可以划分为三个层次(1)最高层是文件系统提供给用户的接口(GUI、cmd、SystemCall)。(2)中间层是对对象进行操作和管理的软件集合(文件存储空间的管理,文件目录管理,地址转换,文件读写管理,文件的共享与保护。)(3)最底层是对象(文件、目录、磁盘空间)及其属......
  • Power BI - 5分钟学习重命名
    每天5分钟,今天介绍PowerBI重命名功能。什么是重命名?顾名思义就是给导入PowerBI数据表的列进行重命名。很多时候,导入PowerBI的数据表的列名称并不是我们常用的命名方式,这时候就需要根据公司或者部门的使用习惯进行重命名操作。第4天-PowerBI重命名我们导入一张【Product】......
  • 基础学习
    1.需要创建场景//创建场景constscene=newTHREE.Scene();2.创建相机//创建相机constcamera=newTHREE.PerspectiveCamera()//相机的位置camera.position.z=18camera.position.y=03.创建物体//创建立方体constgeometry=newTHREE.BoxGeometry();//......
  • Linux学习笔记 虚拟机的安装
    VMWare是当前最主流、应用最广泛的虚拟软件(来搭建虚拟环境)。它可以保证在一台现有的计算机操作系统上,模拟出一个新的硬件环境,以实现在一个电脑上真正同时运行两个OS。其官网为:www.vmware.com。在我看来:使用VMWare装的OS还可以同Windows主机进行网络通信的。安装VMWare的配置建议......
  • 学习Vue3 第四章 vue指令
    指令v-开头都是vue的指令v-text用来显示文本v-html用来展示富文本v-if用来控制元素的显示隐藏(切换真假DOM)v-else-if表示v-if的“elseif块”。可以链式调用v-elsev-if条件收尾语句v-show用来控制元......
  • React学习三:Redux和ReactRouter
    Reduxredux是一个仓库,用来存储数据。当react中多个组件需要用到同一个数据时,如果我们一次次地请求会比较麻烦,也会加大服务器的压力。这种多组件用到的数据就可以存放到redux仓库中。redux仓库使用原生的依赖创建比较繁琐,为了更快创建使用"@reduxjs/toolkit"这个依赖包。创建好的......
  • 我对linux的学习计划
     对于现在的我来说,现在还没有明确的从业方向,还在慢慢的摸索过程中,但无论以后做什么工作都需要不断的学习,对于计算机行业来说,新技术不断涌现,保持学习的态度,及时了解新的发展和趋势,不断更新自己的知识和技能。 千里之行,始于足下。任何东西基础是必须的。万丈高楼平地起,再高的大......
  • CPU原理学习
    本文是对B站踌躇月光大佬的8位二进制CPU实现教程的学习记录非常感谢这位大大能够提供这么好的教程!!!OvO半加法器半加器是指对输入的两个一位二进制数相加(A与B),输出一个结果位(S)和进位(C),没有进位的输入加法器电路,是一个实现一位二进制数的加法电路。计算公式:S=A^B(A异或B)C=......
  • C++ Primer 学习笔记——第十三章
    第十三章拷贝控制前言类是如何控制类型对象的拷贝、赋值、移动和销毁的?类通过一些特殊的成员函数控制,包括:拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符以及析构函数。当定义一个类时,我们显式地或隐式的指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一......