织梦 网站源码,冀州市网站建设,北京软件开发公司企云云,国内精自品线一区91制片在计算机视觉领域#xff0c;Python的cv2库是一个不可或缺的工具#xff0c;它提供了丰富的图像处理功能。作为OpenCV的Python接口#xff0c;cv2使得图像处理的实现变得简单而高效。 示例图片
目录
opencv获取方式
图像基本知识
颜色空间
RGB
HSV
CV2常用图像处理方… 在计算机视觉领域Python的cv2库是一个不可或缺的工具它提供了丰富的图像处理功能。作为OpenCV的Python接口cv2使得图像处理的实现变得简单而高效。 示例图片
目录
opencv获取方式
图像基本知识
颜色空间
RGB
HSV
CV2常用图像处理方法
读取图像cv2.imread() imread各flags参数含义详解
读取结果说明
Ndarray说明
获取单通道颜色矩阵
显示图像
使用cv2.imshow()显示图像
cv2.waitKey()
cv2.destroyAllWindows()
使用plt.imshow()显示图像
总结 opencv获取方式
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple opencv-python 图像基本知识
颜色空间 颜色空间是一种用来表示颜色的数学模型,它描述了如何将颜色信息数字化以便于计算机进行处理和分析。在计算机视觉和图像处理领域常见的颜色空间包括RGB、HSV等。
RGB RGB颜色空间是最常用的颜色空间之一它基于红Red、绿Green、蓝Blue三种基本颜色通过调整这三种颜色的强度和组合可以产生各种颜色。 在RGB颜色空间中,每个颜色的强度值范围通常在0到255之间分别代表红、绿、蓝三种颜色的亮度。通过调整这些亮度值可以混合出各种颜色。例如当RGB三个通道的强度值都为0时表示黑色当RGB三个通道的强度值都为255时表示白色。 RGB颜色调色板 HEX是一种常用于网页设计和图像处理中的颜色表示方法它通过六位十六进制数来表示RGB颜色空间中的颜色。在HEX表示法中前两位代表红色强度中间两位代表绿色强度最后两位代表蓝色强度。 通过改变这三个值的不同组合可以得到一个包含2^2416777216种颜色的调色板但是人眼可见的却远远少于这个数字。 例如我们总是认为乌鸦是黑色的,但其实在不同的光照条件下乌鸦的羽毛可能会呈现出彩色的光泽。这正是因为RGB颜色空间虽然能够表示大量的颜色但人眼的颜色感知却受到环境、光照等多种因素的影响。 乌鸦羽毛五彩斑斓的黑 HSV HSV(Hue, Saturation, Value)是根据颜色的直观特性 色调Hue、饱和度Saturation和明度Value三个参数。由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 HSV分量可以通过RGB各分量值转化得到计算公式如下 其中R,G,B分别为RGB颜色空间中的3个分量。 图像格式
常见的图像格式有BMP格式TiIFF格式GIF格式,JPEG格式,PNG格式等。
BMP格式 BMP格式是windows环境中的一种标准(但很多microsoft应用程序不支持它)这种格式采用位映射存储格式除了图像深度可选以外不采用其他任何压缩因此BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准因此在Windows环境中运行的图形图像软件都支持BMP图像格式。 TIFF格式 TIFF格式是一种灵活的图像存储格式广泛应用于印刷、出版和扫描领域。它支持多种色彩模式包括灰度、RGB、CMYK等并允许无损压缩以在保证图像质量的同时减少文件大小。TIFF格式还支持多层图像和透明度使其在处理复杂图像时具有显著优势。此外TIFF格式具有良好的兼容性能够被多种图像编辑和处理软件所支持。
GIF格式 GIF格式是一种广泛用于网络传输的图像格式。GIF格式以其独特的无损压缩技术和支持透明背景的特性而著称这使得GIF图像在保持高质量的同时文件大小相对较小非常适合在网络上快速加载和显示。此外GIF格式还支持动画效果能够创建简单的动态图像这一特性使其在社交媒体和网页设计中备受欢迎。尽管GIF格式的色彩深度有限通常只能显示256种颜色但这并不妨碍它在特定应用场景下的广泛应用。
JPEG格式 JPEG格式源自对相对静止灰度或彩色图像的一种压缩标准,在使用有损压缩方法时可节省的空间是相当大的,目前数码相机中均使用这种格式。尽管JPEG格式采用有损压缩可能会导致一定的图像质量损失但通过调整压缩级别用户可以在图像质量和文件大小之间找到理想的平衡点。这种灵活性使得JPEG格式成为存储和传输大量图片的优选方案尤其是在存储空间有限或网络带宽受限的情况下。此外JPEG格式还具有良好的跨平台兼容性几乎可以被所有主流的图像查看器和编辑器所支持。
PNG格式 PNG是一种无损压缩的图像格式支持透明背景和Alpha通道使得图像在保持高质量的同时还能展现出更为丰富的层次感和细腻度。与GIF格式相比PNG格式在色彩深度上不再受限能够显示1600多万种颜色这为图像的色彩表现提供了更广阔的空间。此外PNG格式还支持多种图像编辑功能如伽玛校正、文本注释等进一步增强了其在图像处理和编辑领域的实用性。由于其无损压缩的特性PNG格式在需要保持图像原始质量和细节的应用场景中如网页设计中的图标、按钮等具有不可替代的优势。
需要注意的是PNG格式的图片相对于其他格式图片来说,除了RGB三通道以外还多了一层alpha通道,这一层alpha通道使得PNG图片支持透明度设置即可以实现图片的半透明效果或者是抠图后的图片背景透明化。 读取图像cv2.imread()
#cv2.imread读取图像
import cv2
imagecv2.imread(filenametest.jpg,flagscv2.IMREAD_UNCHANGED)
#filename:图像文件的路径
#flags:#cv2.IMREAD_COLOR:BGR格式彩色图像 #cv2.IMREAD_GRAYSCALE:灰度图像是单通道的 #cv2.IMREAD_UNCHANGED:包括alpha通道,即透明通道#cv2.IMREAD_COLOR_BGR以BGR格式读取图像,彩色#cv2.IMREAD_COLOR_RGB以RGB格式读取图像,彩色#cv2.IMREAD_ANYDEPTH:读取任意深度的图像#cv2.IMREAD_ANYCOLOR:读取任意颜色的图像#cv2.IMREAD_LOAD_GDAL:使用GDAL读取图像#cv2.IMREAD_REDUCED_COLOR_2:读取1/2的彩色图像#cv2.IMREAD_REDUCED_COLOR_4:读取1/4的彩色图像#cv2.IMREAD_REDUCED_COLOR_8:读取1/8的彩色图像#cv2.IMREAD_REDUCED_GRAYSCALE_2:读取1/2的灰度图像#cv2.IMREAD_REDUCED_GRAYSCALE_4:读取1/4的灰度图像#cv2.IMREAD_REDUCED_GRAYSCALE_8:读取1/8的灰度图像#cv2.IMREAD_IGNORE_ORIENTATION:忽略图像的方向信息#cv2.IMREAD_COLOR是默认值,读取的图像是彩色BGR格式相当与cv2.IMREAD_COLOR_BGR
print(image.shape) imread各flags参数含义详解 cv2.imread()函数只有两个参数,filename与flages,filename指图像文件路径,flags是指定图像读取的方式。
以下是所有flags释义
flags cv2.IMREAD_COLOR读取彩色图像cv2.IMREAD_GRAYSCALE读取单通道的灰度图像cv2.IMREAD_UNCHANGED:按照图像原格式读取图像,若图像是png图像那么包括alpha通道,即透明通道,此时图像是四通道的,若图像不是png格式那么还是三通道。 cv2.IMREAD_COLOR_BGR以BGR格式读取图像,彩色 cv2.IMREAD_COLOR_RGB以RGB格式读取图像,彩色cv2.IMREAD_ANYDEPTH读取任意深度的图像 cv2.IMREAD_ANYCOLOR读取图像时自动检测并保留图像的原始颜色通道数。cv2.IMREAD_LOAD_GDAL使用GDAL读取图像。GDAL 是专门用于处理地理空间数据格式的库如 GeoTIFF、ENVI、HFA 等。cv2.IMREAD_REDUCED_COLOR_2读取1/2的彩色图像cv2.IMREAD_REDUCED_COLOR_4读取1/4的彩色图像 cv2.IMREAD_REDUCED_COLOR_8:读取1/8的彩色图像cv2.IMREAD_REDUCED_GRAYSCALE_2读取1/2的灰度图像cv2.IMREAD_REDUCED_GRAYSCALE_4读取1/4的灰度图像cv2.IMREAD_REDUCED_GRAYSCALE_8读取1/8的灰度图像cv2.IMREAD_IGNORE_ORIENTATION忽略图像的方向信息
读取结果说明
Ndarray说明 Ndarray的一般结构为:
[行数,列数,深度] 其中行和列都是一维数组,我们知道行*列便可以构成矩阵,而深度则用来表示不同的行*列构成的矩阵的在最外层的数组中的索引。简而言之,ndarray就是数组内嵌套矩阵的格式,这样会十分方便理解。 上述代码中的image为读取结果,由于我们的示例图片是.jpg格式没有alpha通道,所以flags使用cv2.IMREAD_UNCHANGED与cv2.IMREAD_COLOR并没有区别,通道数都为3。 image的shape(1161, 1080, 3) cv2.imread()函数的结果是ndarray,我们打印出其shape的结果中前两个参数是图像的高与宽,第三个参数是image的维度,这里的维度其实就是图像的RGB通道数。
获取单通道颜色矩阵 倘若我们想要分别切片获取image的三个通道数对应的颜色矩阵那么我们可以这样写.
blueimage[:,:,0]
greenimage[:,:,1]
redimage[:,:,2]
#或者
blueimage[0:1161,0:1080,0]
greenimage[0:1161,0:1080,1]
redimage[0:1161,0:1080,2] 在第一种写法中,这里要说明一下的是,ndarray的切片方法与python的list切片方法一致切片时有一个特殊用法就是[:]它相当与[0:len(array)]用来直接获取整个数组所有值,倘若你要是不知道某一维这个数组的长度(比如上边我们读取的图像高1161宽1080,直接切片需[0:1161,0:1080]),又想获取整个数组的所有内容,可以使用这种方法。 当然为了方便cv2已经内置了split函数替我们直接获取三个颜色通道的矩阵。
blue,green,redcv2.split(image)
显示图像
使用cv2.imshow()显示图像
import cv2#opencv读取的格式是BGR
imagecv2.imread(test.jpg)
imagecv2.resize(image,(500,500))#更改一下图像大小,为了方便显示
cv2.imshow(image,image)
cv2.waitKey(0)
cv2.destroyAllWindows() 这里的image是一个shape为(500,500,3)的ndarray,表示这是一个500x500像素的彩色图像具有红、绿、蓝三个颜色通道。每个颜色通道都是一个500x500的二维数组。
结果 cv2.waitKey() cv2.waitKey()是用来在OpenCVcv2库中暂停程序执行并等待用户按键的函数。这个函数通常在显示图像时使用比如在一个窗口中显示图像后我们希望程序在用户按下任意键后再继续执行后续操作这时就可以使用cv2.waitKey()函数。该函数接受一个整数参数表示等待的毫秒数。如果参数为0则表示无限期等待直到用户按下键盘上的任意键。在按下键后cv2.waitKey()会返回按键的ASCII码值我们可以根据这个返回值来判断用户按下了哪个键。需要注意的是在使用cv2.waitKey()之前必须已经创建了一个图像显示窗口否则该函数将无法正常工作。
cv2.destroyAllWindows() cv2.destroywindows()是用来关闭所有OpenCV创建过的窗口的,这些窗口实际是都是使用python内置库tkinter编写的,先前的tkinter窗口会阻塞主线程。所以,当我们完成图像处理或显示操作后经常需要关闭这些窗口以释放资源。倘若不将他们关闭当前图像窗口可能无法显示。
使用plt.imshow()显示图像
import cv2#opencv读取的格式是BGR
import matplotlib.pyplot as plt#matplotlib读取的格式是RGB
imagecv2.imread(test.jpg)
imagecv2.resize(image,(500,500))
#使用plt.imshow()需要先将BGR转化成RGB这里使用cv2.cvtColor颜色通道转换函数完成
imagecv2.cvtColor(image,cv2.COLOR_RGB2BGR)
plt.axis(off)
plt.imshow(image)
结果 这里需要注意的是opencv读取的图像时默认格式是BGR,而matplotlib读取的格式是RGB,如果我们在读取图像时不指定读取方式且不使用cv2.cvtColor()通道转换函数将颜色通道转换成RGB的话,那么显示出来的图像的颜色便会怪怪的。。。 这是因为,matplotlib把原本是红色的通道误认为是蓝色通道而原本是蓝色的通道则被认为是红色通道。这种颜色通道的错位就会导致图像颜色显示异常、 但是,无论如何,cv2.imshow与plt.imshow这两个函数在显示图像时,需要传入的都是图像的ndarray数据。
保存图像cv2.imwrite()
#cv2.imwrite保存图像
import cv2
imagecv2.imread(filenametest.jpg,flagscv2.IMREAD_UNCHANGED)
#图像经过某些变换或操作后需要保存
cv2.imwrite(filenamenewImage.jpg,imgimage,params[int(cv2.IMWRITE_JPEG_QUALITY), 50])
#filename:保存图像文件名称
#img图像颜色矩阵
#params参数是一个可选的序列通常是列表或元组用于传递图像编码和压缩相关的参数。
总结 本文主要介绍了opencv图像的读取与显示,后序还将分享更多相关图像处理技术以及如何利用cv2进行图像特征提取和匹配。并且还会将所有内容合并到专栏中,免费订阅。 通过本专栏的学习读者将能够利用cv2库解决实际的图像处理问题为计算机视觉项目打下坚实基础。