第1章 图片与初用OpenCV

2024-01-07 21:52
文章标签 opencv 图片 初用

本文主要是介绍第1章 图片与初用OpenCV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在本章,初步介绍OpenCV的一些基本操作,例如图片的读取以及图片格式的转换。1图片在计算机中的几种存储形式2图片的读取和延时操作3图片的各种输出形式

1.1 图片在计算机中的存储形式
即使我们对图片在计算机中的存储格式不是很清楚,也知道图片在计算机中是以二进制的形式存储的。图片如何转为二进制的形式在这里不进行详细说明,本节只讲程序像素X是如何以矩阵的形式进行图片的操作和相关运算的。
一张1024*960像素的图片,如果我们在程序里使用它或者对它进行一些操作,那么它就是一个960行,1024列的二维矩阵。矩阵的每一个元素存储的都是一个列表,而列表里面存储的则是各个通道的值,那什么是通道呢?
在讲通道之前,我们先了解一下图片的几种存储形式。
1.1.1 BGR图
我们平时在生活中拍摄的图片一般是RGB(R:红色,G:绿色,B:蓝色)格式的图片,在OpenCV中,图片常使用的格式是BGR的,两者本质上没有区别,只是使用的习惯不同。调节3中颜色的值可以构成不同颜色的像素点,但是我们在处理图片的时候,一般都不直接采用BGR图片进行操作,二十需要进行图片颜色格式的转换。
我们称B,G,R是图片上面每个像素点构成的通道,所以BGR图是一个三通道的图片。在OpenCV里,每个通道的取值范围是0~255,我们可以通过Python中元组的形式进行颜色的合成,如(255,255,255)为白色,(0,0,0)为黑色。
1.1.2 灰度图
相比BGR图,灰度图的每个像素点不再由B,G,R这3个通道构成,它只由一个通道来控制,即灰度值,所以灰度图是由灰度值来控制的单通道图。灰度值的取值范围为0~255;如果取哦,表示黑色;如果取255表示白色。
1.1.3 HSV图
HSV图显示出来也是彩色的,且HSV图也是由3个通道构成的,只不过HSV图里面的3个通道和BGR图中的不同,它的3个通道如下:
H:色彩或色度,它取值范围是0~179
S: 饱和度,它的取值范围是0~255
V: 亮度,它的取值范围是0~255
HSV其实也可以理解为RGB的另一种表达方式,这种表达方式更有利于我们对指定颜色的物体进行追踪和提取
1.1.4 二值图
二值图可以理解为一种很特殊的灰度图,它不具有通道,并且图中每个像素点的取值只是0或255,换句话,非黑即白。而灰度图与二值图不同的地方在于,灰度图可以取0~255的任何一个值。
二值图的意义在于他可以帮助用户去除图片的噪点,使得图片内只存在我们想要的那个物体的二值化表示部分。
1.2 图片的读取与写出
现在我们来介绍图片的读取以及写出,虽然这是OpenCV中非常基础的操作,但是它贯穿整个OpenCV的学习过程。
1.2.1 图片的读取
现在需要进行图片的读取,需要调用的函数是cv2.imread,它的语法如下。
cv2.imread(filename,flag=1)
其参数分别解释如下。
filename:读取图片的相对地址
flag:设置读取格式,默认为1,表示按照BGR三通道的方式进行读取,如果选择0,则以灰度图单通道的方式进行读取
示例代码如下:
import cv2
img=cv2.imread(“c://desktop/1.jpg”)
这个时候,img变量就已经是矩阵形式的“1.jpg"图片,并且她的每个像素点都是以BGR三通道的方式进行存储的。
如果我们想要以灰度图的方式读取图片,只需要将flag参数设置为0
img=cv2.imread(“c://desktop/1.jpg”,0)
此时,img变量中保存的就是单通道的”1.jpg" 图片的矩阵形式,矩阵的每个元素列表中只有一个灰度值。
1.2.2 图片的保存
接下来介绍图片的保存函数,也就是cv2.imwrite函数,语法如下:
cv2.imwrite(filename,img)
参数分别解释如下:
filename:要保存的图片名字,此处也是相对地址
img: 要保存的图片的矩阵形式
示例代码
import cv2
img=cv2.imread(“1.jpg”,0)
cv2.imwrite(“2.jpg”,img)
上诉代码就是将文件夹中1.jpg ,以矩阵的方式读取到程序中,然后将它以2.jpg为名字保存到所在文件夹中
1.2.3 BGR图的读取与写出
import cv2
img=cv2.imread(“1.jpg”,1)
cv2.imwrite(2.jpg,img)
等价于如下:
img=cv2.imread(“1.jpg”,cv2.IMREAD_COLOR)
cv2.imwire(“2.jpg”,img)
1.2.4 灰度图的读取与写出
import cv2
img=cv2.imread(“1,jpg”,0)
cv2.imwrite(“2.jpg”,img)
等价于
img=cv2.imread(“1,jpg”,IMREAD_GRAYSCALE)
cv2.imwrite(“2.jpg”,img)
1.2.5 图片展示
我们还没在程序运行的时候看到过图片,如果想在运行的时候看到图片的当前状态,需要使用cv2.imshow函数进行图片展示,如下
cv2.imshow(name,img)
参数
name:展示窗口的名字
img:图片的矩阵形式
如下函数
import cv2
img=cv2.imread(“1.jpg”)
cv2.imshow(“image”,img)
cv2.imwrite(“2.jpg”,img)
cv2.destroyAllWindows()
当我们在运行上述代码的时候,可以发现确实有一张图片弹出来了,但是很快就关闭了,原因在于cv2.imshow函数并没有延时的作用,可是计算机的运行速度比计算机窗口弹出速度快,所以窗口只是显示了极短的时间,代码已经执行完了,图片自动关闭。怎么才可以让图片窗口停留长呢?
很简单,既然cv2.imshow这个函数没有延迟作用,那么使用的函数的这行代码和下一行代码之间加一个延时函数就可以了
1.2.6 图片延时
现在我们在cv2.imshow所在的行和下一行代码之间加一个延时的函数来确保人眼能看清楚窗口。我们需要cv2.waitKey函数做到这一点,语法如下
cv2.waitKey(time)
其中,time表示等待的时间,单位为毫秒
这个函数是在time时间内,计算机会等待我们键盘上的命令,如果在time内程序没有等到按键指令它就自动进入下一帧。因为这个是图片没有下一帧,所以是自动关闭窗口,
如果我们把这个time 设置成0,并不是等待0 毫秒然后再执行下一帧,而是停止到当前帧,有案件指令它会进入下一帧。所以在显示单张图片的时候大多数写cv2.waitKey(0)
1.2.7
图片读取演示
介绍了如何添加延时函数后,我们尝试读取图片,示例代码
import cv2
img=cv2.imread(“1.jpg”)
cv2.imshow(“image”,img)
cv2.waitKey(0)
cv2.imwrite(“2.jpg”,img)
cv2.destoryAllwindows()
此时图片自动停留在桌面,按任意键图片消失,程序关闭。如果我们想通过添加某个特定键程序才关闭,可以通过添加一个if语句进行判定。如果按的键不为指定的键,键一直处于while循环中,直到摁到指定键,才会通过break语句结束循环,示例代码
import cv2
img=cv2.imread(“1.jpg”)
cv2.imshow(“image”,img)
while 1:
if cv2.waitKey(0)==ord(“q”):
break
else:
pass

cv2.waitKey(0)
cv2.imwrite(“2.jpg”,img)
cv2.destoryAllwindows()

这篇关于第1章 图片与初用OpenCV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/581343

相关文章

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(