Opencv学习笔记(1)
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)图像是由像素构成的。像素,也叫像素点或像元,是最基本的构图元素。如果把图放的足够大,就能看到一个个像马赛克一样的小色块,这就是像素点。每个像素点为一种颜色,多个像素点在一起组成了丰富多彩的图片。
图片尺寸可以理解为图片横向和纵向的像素点数量。比如一张图片由100×100个像点组成,那么这张图片的尺寸就是100x100。
(2)常见的图像有1通道(灰度图)、3通道(彩色图)、4通道(透明图),每个通道的像素值范围是[0,255],彩色图是我们最常见的,意思是每个像素由B、G、R三个值组成(也就是三原色),比如(255,255,255)表示白色。
在图像识别中,我们可以使用一组向量来表示颜色,比如用(0,0,0)表示黑色、(255,255,255)表示白色。其中,0-255表示色彩空间被量化成256个数,最低亮度值为0,最高亮度值为255。在这个色彩空间中,有256*256*256种颜色。
(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()
结果显示:

Opencv学习笔记(1)的更多相关文章
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- paper 93:OpenCV学习笔记大集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
随机推荐
- react中使用动画 react-transition-group
在React中通过react-transition-group使用过渡.动画,首先要有CSS3中的过渡和动画的相关知识储备,可以参考 过渡和2D变换.动画和3d变换. 我们自己通过css设置过渡.动画 ...
- ArrayList底层原理、线程安全及其相关集合(面试常问)
一.ArrayList底层原理 1.特点及其原理:ArrayList底层基于数组实现,查找快,增删慢 2.ArrayList底层原理,初始化及调用add()方法添加元素: 默认初始化容量为10 第一次 ...
- 群晖DS218+部署PostgreSQL(docker)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 起因是懒 最近在开发中要用到PostgreSQL数据库 ...
- AI测试,给出的答案还挺那么回事儿的~
今天文心一言全民开放了,所有人都可以正常下载使用了,不用像之前一样排队等号了.之前内测阶段倒也体验过,技术人员总是喜欢尝鲜,第一时间拿到邀请码后就各种调戏了TA一番,那时觉得给出的答案总有些差强人意, ...
- 【译】在 Visual Studio 2022 中安全地在 HTTP 请求中使用机密
在 Visual Studio 2022 的17.8 Preview 1版本中,我们更新了 HTTP 文件编辑器,使您能够外部化变量,从而使跨不同环境的 Web API 测试更容易.此更新还包括以安全 ...
- 58同城二手车数据爬虫——数字加密解码(Python原创)
一.基础首页爬取 def crawler(): # 设置cookie cookie = '''cisession=19dfd70a27ec0e t_f805f7762a9a237a0deac37015 ...
- 一文弄懂TypeScript中的混合
1.前言 由于TypeScrip中的类不支持多继承,所以引入了混合(Mixin)的特性,可以间接实现继承的效果. 2.正文 // 声明一个汽车类Vehicle,它有drive方法 class Vehi ...
- Vue 核心技术
1.1 Vue简介 1.1.1 官网 英文官网 中文官网 1.1.2 介绍与描述 动态构建用户界面的 渐进式 JavaScript 框架 作者:尤雨溪 1.1.3 Vue的特点 遵循 MVVM 模式 ...
- 洛谷题解 | P1046 陶陶摘苹果
目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目思路 AC代码 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶 ...
- open与fopen的区别
1. 来源 从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别: open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描 ...

