文章目录
目标掌握图像的读取和保存方法
访问图像的像素
在图像上绘制集合图像
获取图像属性,并实现通道的合并、分离
颜色空间变换
1 图像的IO操作
1.1 读取图像
API: cv.imread()
参数:
(1)图片路径
(2)读取方式的标志
cv.IMREAD_COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略,这是默认参数(该参数值可以用1代替)
cv.IMREAD_ GRAYSCALE:以灰度模式加载图像(该参数值可以用0代替)
cv.IMREAD_UNCHANGED:彩色模式加载图像,并包含alpha通道的加载图像。(该参数值可以用-1代替)
import cv2
#以灰度图的形式读取图像
img=cv2.imread('test.png',0)
#以彩色图的形式读取图像
img2=cv2.imread('test.png',1)
#
img3=cv2.imread('test.png',-1)
1.2 显示图像
API: cv.imshow()
参数:
(1)显示窗口名称,以字符串类型表示
(2)图像路径
注意: 在调用显示图像API后,要调用cv.waitKey()给图像绘制留下时间,否者窗口会出现无响应情况,并且图像无法显示出来。
import cv2
import matplotlib as plt
#(1)以彩色图的形式读取图像
img2=cv2.imread('test.png',1)
#(2)显示图像
##2.1 opencv中的显示——BGR形式显示的
cv2.imshow('image2',img2)
cv2.waitKey(0)#一直显示
##2.2 matplotlib显示——RGB形式显示
1.3 保存图像
API: cv.imwrite()
参数:
(1)图片路径
(2)图像
import cv2
import matplotlib as plt
#(1)以彩色图的形式读取图像
img2=cv2.imread('test.png',1)
#(2)显示图像
##2.1 opencv中的显示——BGR形式显示的
cv2.imshow('image2',img2)
cv2.waitKey(0)#一直显示
##2.2 matplotlib显示——RGB形式显示
#(3)保存图像
cv2.imwrite('test_imwrite.jpg',img2)
2 绘制几何图形
2.1 绘制直线
API: cv.line(image,start,end,color,thickness)
参数:
(1)img要绘制的图像
(2)start/end直线的起点和终点
(3)color线条的颜色
(4)Thickness线条宽度
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1.创建图像
img=np.zeros((512,512,3),np.uint8)
#2.绘制图形
cv2.line(img,(0,0),(511,511),(255,0,0),5)
#3.显示图像
plt.imshow(img[:,:,::-1])
plt.show()
2.2 绘制圆形
API: cv.circle(img,centerpoint,r,color,thickness)
参数:
(1)img要绘制的图像
(2)centerpoint圆形中心点
(3)r圆形半径
(4)color线条的颜色
(5)Thickness线条宽度
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1.创建图像
img=np.zeros((512,512,3),np.uint8)
#2.绘制图形
cv2.line(img,(0,0),(511,511),(255,0,0),5)#直线
cv2.circle(img,(256,256),60,(0,0,255),-1)#圆形
#3.显示图像
plt.imshow(img[:,:,::-1])
plt.show()
2.3 绘制矩形
API: cv.rectangle(img,leftupper,rightdown,color,thickness)
参数:
(1)img要绘制的图像
(2)leftupper左上角坐标
(3)rightdown右下角坐标
(4)color线条的颜色
(5)Thickness线条宽度
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1.创建图像
img=np.zeros((512,512,3),np.uint8)
#2.绘制图形
cv2.line(img,(0,0),(511,511),(255,0,0),5)#直线
cv2.circle(img,(256,256),60,(0,0,255),-1)#圆形
cv2.rectangle(img,(100,100),(400,400),(0,255,0),5)#矩形
#3.显示图像
plt.imshow(img[:,:,::-1])
plt.show()
2.4 向图像中添加文字
API: cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)
参数:
(1)img要绘制的图像
(2)test要写入的文本
(3)station文本放置的位置
(4)font字体
(5)Fontsize字体大小
(4)color线条的颜色
(5)Thickness线条宽度
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1.创建图像
img=np.zeros((512,512,3),np.uint8)
#2.绘制图形
cv2.line(img,(0,0),(511,511),(255,0,0),5)#直线
cv2.circle(img,(256,256),60,(0,0,255),-1)#圆形
cv2.rectangle(img,(100,100),(400,400),(0,255,0),5)#矩形
cv2.putText(img,'hello',(100,150),
cv2.FONT_HERSHEY_COMPLEX,
5,(255,255,255,3))#写文字
#3.显示图像
plt.imshow(img[:,:,::-1])
plt.show()
3 获取并修改图像中的像素点
通过行和列的坐标值获取该像素点的像素值,对于BGR图像,返回一个蓝,绿,红的值的数组。对于灰度图像,仅返回响应的强度值。
import numpy as np
img=np.zeros((512,512,3),np.uint8)
print(img[100,100])
img[100,100]=(0,0,255)
print(img[100,100])
4 获取图像属性
图像属性包括:行数、列数和通道数,图像数据类型,像素等。
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=np.zeros((255,255,3),np.uint8)
print(img.shape)#形状
print(img.size)#大小
print(img.dtype)#类型
5 图像通道的拆分与合并
有时候需要在B,G,R通道上单独工作,在这种情况下,需要将三种通道分割为单个通道,或者将单独的通道合并到BGR图像。
通道拆分API: b,g,r=cv.split(img)
通道合并API: img=cv.merge((b,g,r))
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('test.png')
#通道拆分
b,g,r=cv2.split(img)
plt.imshow(b,cmap=plt.cm.gray)#灰度
#通道合并
img2=cv2.merge((b,g,r))
plt.imshow(img2[:,:,::-1])
6 色彩空间的改变
最常用的色彩空间转换方法有两种,BGR_GRAY、BGR_HSV
API: cv.cvtColor(input_img,flag)
参数:
(1)input_img进行色彩空间转换的图像
(2)flag:转换类型
cv.COLOR_BGR2GRAY
cv.COLOR_BGR2HSV
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('test.png')
#转换为HSV色彩空间
img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#转换为GRAY色彩空间
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('secaikongjianzhuanhuan',img)
cv2.waitKey(0)