本篇博客将介绍有关数字图像处理的基础操作,包括图片的读取,图片的显示,图片的保存。
一.读取图片
OpenCV图片读取的函数为:cv2.imread()
其中有两个参数,第一个参数为读取图片路径,第二个参数为读取图片方式,如:
img=cv2.imread('test.png',cv2.IMREAD_GRAYSCALE)
其中,第二个参数共有三种选择:
cv2.IMREAD_COLOR #以彩色模式加载图片,也可以用1代替,这是默认参数。
cv2.IMREAD_GRAYSCALE #以灰度图像模式加载图像,也可以用0来代替。
cv2.IMREAD_UNCHANGED #包括alpha通道的加载图像模式,也可以用-1来代替。
二.显示图像
OpenCV图片读取的函数为:cv2.imshow()
同样有两个参数,第一个为图像的窗口名称,第二个为加载的图片。如:
cv2.imshow('tset_show',img)
但需要注意的是:在显示完图片后,要调用cv2.waitKey()给图像绘制留下时间,(一般设置参数为0),否则图片会显示一下就闪退消失。并加上cv2.destroyAllWindows()在关闭图像删除窗口。(这个函数一般不设置参数)
cv2.imshow('tset_show',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
三.图像的保存
OpenCV图片读取的函数为:cv2.imwrite()
同样有两个参数,第一个参数为图片保存地址及名称,第二个参数为要保存的图片。如:
cv2.imwrite('lena_gray.png',img)
四.获取图像属性
主要介绍三个获取图片属性的函数:
(1)获取图片形状
img.shape
(2)获取图片大小
img.size
(3)获取图片数据类型
img.dtype
注意:(1)上面三个代码中的img为读取图片的变量名,可能因设置变量不同而不同。
(2)若以灰度图像的形式读取图片,则只会输出形状大小而不输出通道数。
五.图像通道的拆分
有时候在处理彩色图片时,需要在BGR各个通道上单独操作,这就需要划分通道,其函数分别为:cv2.split()以及cv2.merge()。其代码如下:
b,g,r=cv2.split(img) #通道拆分
img=cv2.merge((b,g,r)) #通道合并
六.图像的色彩空间转变
OpenCV实际上有很多种色彩空间转变的方法,其函数为cv2.cvtColor(),其中两个参数分别为需要转化的图像以及转化的方式。
比较常见的的主要有两种:将BGR形式图片与Gray灰度图转化,将BGR形式图片与HSV色彩空间转化。其代码如下:
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将三通道BGR形式转化为gray灰度图片
img3=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#将三通道BGR形式图片转化为HSV色彩空间图片
其中,第二个参数为cv2.COLOR_xxx2yyy,其中xxx为原本图片形式,yyy为需要转化的图片形式。
例子以及完整代码:
问题:(1)读取一张图片,以三通道方式读取,(2)分别输出其形状,大小,数据类型,(3)并将其通道拆分,并显示其在B通道上的图像,然后再将其合并,(4)将原本BGR形式图片转化为灰度图片,显示其图片(5)保存转化后的图片。
import cv2
img=cv2.imread('lena.png',cv2.IMREAD_COLOR)#读取图片
print(img.shape)#输出形状
print(img.size)#输出大小
print(img.dtype)#输出数据类型
b,g,r=cv2.split(img) #通道拆分
cv2.imshow('b_lena',b) #显示在b通道上的图片
img=cv2.merge((b,g,r)) #通道合并
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将三通道BGR形式转化为gray灰度图片
cv2.imshow('gray_show',img2)#显示图像
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('lena_gray.png',img2)#保存图像
原图:
显示属性:
显示在b通道上的图片:
转化为灰度图片并显示:
保存结果:
以上就是关于图像基本操作的全部内容,希望对你能有帮助。