OpenCV+Python入门 详细教程(第一节)


第一节 OpenCV 入门

[声明:本文根据官方文档进行通俗易懂的个人总结,随笔和文章都是同步的!]

注:作为本博客的第一篇随笔,小编力求为每一位阅读者以通俗易懂的方式,完全掌握数字图像处理的基础,记得关注哦!

各位小可爱们,从这篇随笔开始,让我们踏上0基础学习OpenCV进行图像处理的奇妙之旅。

 

前言

  OpenCV是一个开源的计算机视觉库, 在Python中都有非常完备的内部公开的计算机视觉接口。  对于刚入门的新人来说,使用这些接口比重复造轮子方便多了。这些接口可以让我们更加方便、不用理解内部原理,就能实现各种功能的图像处理技术,OpenCV正是基于为计算机视觉提供通用接口这一目标而被策划的。

 

1. 入门

1.1 环境配置

安装 python3.x 以上的版本,opencv 版本在 4.x 以上(opencv3.x 和 opencv4.x 版本内容不兼容

     这里提供 opencv 的安装方式:

     pip install opencv-python -i https://pypi.douban.com/simple

 

     为了提高下载速度,使用国内的镜像源,这里提供几个国内的镜像源,方便大家下载:  

     豆瓣:https://pypi.douban.com/simple

     阿里云::https://mirrors.aliyun.com/pypi/simple

     清华大学:https://pypi.tuna.tsinghua.edu.cn/simple

     中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple

 

在这里,本人安装的版本是  4.4.0.46

 

为了后期的需要,同样需要安装 numpy 模块,这个模块大家不知道也没有关系,后期一步一步接触就自然明白。

     NumPy 是高性能科学计算和数据分析的基础包;它是 pandas 等其他工具的基础。

     numpy  的安装方式:

     pip install numpy -i https://pypi.douban.com/simple

     本人安装的版本是  1.19.4

 

 

1.2 图像处理的基础操作

     OK! 到这里呢,就是正式开始我们的 OpenCV 的学习了。

     在图像处理的开始呢,我们当然要先知道怎么样去读取一个图片

    1.2.1 读取图像

       OpenCV 提供了函数 cv2.imread() 来读取图像,该函数呢,支持各种的静态图像格式

       格式:

retval = cv2.imread( filename [, flags])

在这里,把每个参数解释一下:

  • retval:返回值,这个值是读取到的图像,如果未读取到,返回 “None”;
  • filename:读取图像的完整路径名;
  • flags:读取标记,用来控制读取图像后返回的文件类型。
表1-1 flags 标记值
含义 数值
cv2.IMREAD_UNCHANGED 保持原格式不变 -1
cv2.IMREAD_GRAYSCALE 将图像调整为单通道的灰度图像 0
cv2.IMREAD_COLOR 将图像调整为3通道的BGR图像。该值是默认值 1
cv2.IMREAD_ANYDEPTH 当载入的图像深度为16位或者32位时,就返回其对应的深度图像;否则,将其转换为8位图像 2
cv2.IMREAD_ANYCOLOR 以任何可能的颜色格式读取图像 4

 

函数 cv2.imread() 能够读取多种不同类型的图片,具体如下:

表1-2 支持的图像格式
Windows位图 *.bmp、*.dib
JPEG文件 *.jpeg、* jpg、 * jpe
JPEG 2000文件 *.jp2
便携式网络图形(Portable Network Graphis, PNG)文件 .png
WebP文件 * .webp
便携式图像格式(Portable Image Format) *.pbm、*.pgm、 *ppm、 *.pxm、 *.pm
Sun (Sun rasters)格式 *.sr、*.ras
TIFF文件 *.tiff、 *.tif
OpenEXR图像文件 * .exr
Radiance格式高动态范围 (Hig-Dyamic Range, HDR)成像图像 *.hdr、*.pic
GDAL支持的栅格和矢量地理空间数据 Raster、Vector 两大类

 

例如:我们读取名为 img.bmp 的图像,并保持原有格式读入,则使用的语句为:

lena = cv2.imread("img.bmp",-1)

 注:上述的代码运行之前,首先需要导入 cv2 模块,为了方便理解,我们在这里函数的前缀都使用 "cv2." 表示:

import cv2
lena = cv2.imread("img.bmp",-1)

 

1.2.2 显示图像

OpenCV 提供了多个与显示有关的函数,下面对常用的几个进行简单介绍。

 

1. namedWindow 函数

函数 cv2.namedWindow() 用来创建指定名称的窗口,其语法格式为:

None = cv2.namedWindow(winname)

式中,winname 是要创建的窗口的名称

例如, 下列语句会创建一个 名为 lesson 的窗口: 

cv2.namedWindow("lesson")

 

2. imshow函数

函数 cv2. imshow() 用来显示图像,其语法格式为:

None = cv2.imshow(winname, mat)

式中:

  • winname 是窗口名称。
  • mat是要显示的图像。

 

例:完整代码:

import cv2

lena=cv2.imread("lena .bmp")

cv2.namedWindow("lesson")

cv2.imshow("lesson", lena)

注:为了方便,文章中的图像由读者自行在电脑上进行操作,这里不再演示,望理解!(只是改变代码中的文件名即可)

 

3. waitKey 函数

函数 cv2.waitKey() 用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值.其语法格式为:

retval = cv2.waitKey( [delay] )
  • retval:表示返回值。如果没有按键被按下,则返回-1;如果有按键被按下,则返回该按键的ASCII码
  • delay:表示等待键盘触发的时间,单位是ms,当该值是负数或者零时,表示无限等待。该值默认为0。

在实际使用中,可以通过函数 cv2.waitKey() 获取按下的按键,并针对不同的键做出不同的反应,从而实现交互功能。

例如, 如果按下A键,则打开名为“PressA”的窗口,如果按下B键,则打开名为“PressB”的窗口。

import cv2 

lena=cv2.imread("lena.bmp")

cv2.imshow("demo", lena)

key=cv2.waitKey()

if key == ord('A') :

    cv2.imshow ("PressA", lena)

elif key == ord('B'):

    cv2.imshow ("PressB", lena)

Python提供了函数 ord(),用来获取字符的ASCII码值。

  因此,在判断是否按下了某个特定的按键时,可以先使用 ord() 函数获取该特定字符的 ASCII 码值,再将该值与 cv2.waitKey() 函数的返回值进行比较,从而确定是否按下了某个特定的键。这样,在程序设计中就不需要 ASCII 值的直接参与了,从而避免了使用 ASCII 进行比较可能带来的不便。

 

4. destroyWindow 函数

函数 cv2.destroyWindow() 用来释放(销毁)指定窗口,其语法格式为:

None = cv2.destroyWindow(winname)

其中,winname 是窗口的名称。

在实际使用中,该函数通常与函数 cv2.waitKey() 组合实现窗口的释放。

import cv2

lena = cv2.imread("lena.bmp")

cv2.imshow("demo", lena)

cv2.waitKey()

cv2.destroywWindow ("demo")

运行上述程序,首先会在一个 名为 demo 的窗口内显示 lena.bmp 图像。

在程序运行的过程中,当未按下键盘上的按键时,程序没有新的状态出现:当按下键盘上的任意一个按键后,窗口 demo 会被释放。

 

5. destroyAIlWindows函数

函数 cv2.destroyAlIWindows() 用来释放(销毁)所有窗口,其语法格式为:

None = cv2.destroyAllWindows( )

例:编写一个程序,演示如何使用函数 cv2.destroyAllWindows() 释放所有窗口。根据题目要求,编写代码如下:

import cv2

lena = cv2.imread("lena.bmp")

cv2.imshow("demo1", lena)

cv2.imshow("demo2", lena)

cv2.waitKey()

cv2.destroyAllWindows()

运行上述程序,会分别出现名称为 demol 和 demo2 的窗口,在两个窗口中显示的都是 lena.bmp 图像。

在未按下键盘上的按键时,程序没有新的状态出现,当按下键盘上的任意一个按键后,两个窗口都会被释放。

 

1.2.3 保存图像

OpenCV提供了函数 cv2.imwrite() ,用来保存图像,该函数的语法格式为:

retval = cv2.imwrite(filename, img [, params])
  • retval:返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑值假(False)。
  • filename:要保存的目标文件的完整路径名,包含文件扩展名。
  • img:被保存图像的名称。
  • params:保存类型参数,是可选的。

例:编写一个程序,将读取的图像保存到当前目录下。

import cv2 

lena = cv2.imread ("lena.bmp")

r = cv2.imwrite("result.bmp", lena)

注:在这里不要将 filename 和 img 名称弄反了,小编在这里也会经常出错误哦!

 

 

好啦好啦!本次随笔已经更新结束喽!

一大早起来同步了一下随笔,连早饭都没吃,要去吃饭喽,拜拜,各位小可爱们!

作者:坚果不爱吃松鼠

本文版权归作者和博客园共有,转载须表明出处,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

如果觉得还有帮助的话,可以点一下右下角的【推荐】。

本文链接:https://www.cnblogs.com/GLblogs/p/14642994.html

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM