目录
1.图片读取与展示(cv2.imread() | cv2.imshow())
1)提取(B, G, R = cv2.split(pic))
1)图像加法运算(cv2.add(pic_1, pic_2))
3)图像开运算与闭运算(cv2.MORPH_OPEN()、cv2.MORPH_CLOSE())
4)顶帽、黑帽运算(cv2.MORPH_TOPHAT()、cv2.MORPH_BLACKHAT())
一、OpenCV简介
OpenCV,即开源计算机视觉库(Open Source Computer Vision Library),是一个广泛使用的计算机视觉和图像处理软件库。它提供了大量的算法和函数,用于图像和视频处理、目标检测、机器学习等任务。
1.应用场景
OpenCV在卫星和网络地图上拼接图像、图像扫描校准、医学图像的降噪、目标分析、安保以及工业检测系统等多个领域都有广泛的应用。此外,OpenCV还在自动驾驶和安全系统、制造感知系统、相机校正、军事应用以及无人空中、地面、水下航行器等方面发挥着重要作用。
2.学习与使用
OpenCV为初学者提供了丰富的教程和示例代码,帮助他们快速入门和提高。开发者可以通过阅读OpenCV的官方文档、参加在线课程或加入社区论坛等方式获取帮助和支持。
随着对OpenCV的深入了解和实践经验的积累,开发者将能够更加熟练地运用这个强大的计算机视觉库来解决实际问题。
二、OpenCV安装
1.安装
打开终端,输入 pip install opencv-python 即可,如需指定版本,输入 pip install opencv-python==版本号 即可。
2.验证
打开Python解释器。
输入import cv2
和 print(cv2.__version__)
来验证OpenCV是否安装成功以及安装的版本号。
三、OpenCV使用
1.图片读取与展示(cv2.imread() | cv2.imshow())
pic = cv2.imread('图片路径') # 读取图片
cv2.imshow('pic', pic) # 显示图片(自定义名称, 图片数据)
cv2.waitKey(ms) # 在一个给定的时间内(ms)等待用户按键触发, 到时自动结束
cv2.destroyAllWindows() # 关闭所有打开的窗口并释放所有相关内存
cv2.imread():传入图片路径及图片后缀;
cv2.imshow():参数1:自定义的图片名称,参数2:传入读取到的图片;
cv2.waitKey():传入图片展示等待的时间,传入0图片会一直展示,直到按任意键退出;
cv2.destroyALLWindows():关闭所有打开的窗口,无需传入参数。
2.图片灰度图(cv2.IMREAD_GRAYSCALE)
#方法一
pic_gray = cv2.imread('图片路径', cv2.IMREAD_GRAYSCALE)
#方法二
pic_gray = cv2.cvtColor(pic, cv2.COLOR_BGR2GRAY)
方法一:读取时直接读取灰度图
方法二:将读取到的原图转换为灰度图
3.图片保存(cv2.imwrite())
cv2.imwrite('保存路径', pic)
cv2.imwrite():参数1:需要保存到的路径,记得加图片后缀,不然会保存失败,参数2:要保存的图片
4.视频读取(cv2.VideoCapture())
vc = cv2.VideoCapture('视频路径')
if vc.isOpened(): # 判断vc视频是否正确打开
open_vd, frame = vc.read() # 读取每一帧视频。返回值1为读取是否有内容,Fasle表示读取结束。返回值2为这一帧的图片内容
else:
open_vd = False
while open_vd: (open_vd=True则一直运行)
open_vd, frame = vc.read()
if frame is None: # 读取完毕之后,frame的值为None
break
cv2.imshow('frame', frame)
if cv2.waitKey(50) == 27: # cv2.waitKey获取键盘符号的ASCII码,27为键盘Esc键
break
vc.release() # 是cv2.VideoCapture对象的一个方法,用于释放视频捕获器的资源。在调用该方法后,视频捕获器将不再使用,因此应该在使用完毕后立即调用该方法。
视频读取的原理就是基于每一帧进行读取与处理
vc.read():返回值1:为布尔值,True为有内容,False为未读取到内容,返回值2:视频这一帧的图像
5.图像截取
pic_roi = pic[200:800, 400:800]
pic_roi = pic[高, 宽]
6.提取与合并RGB颜色通道
1)提取(B, G, R = cv2.split(pic))
#方法一
B = pic[:, :, 0] # B
G = pic[:, :, 1] # G
R = pic[:, :, 2] # R
#方法二
B, G, R = cv2.split(pic)
# 只保留B通道
pic[:, :, 1] = 0 # G通道设为0
pic[:, :, 2] = 0 # R通道设为0
2)合并(cv2.merge((B, G, R)))
pic = cv2.merge((B, G, R))
也可用这种方式将图像1通道转换为3通道,例如:pic = cv2.merge((pic_gray, pic_gray, pic_gray))
7.图片修改
1)图片组合
方法一
pic_gray = np.stack((pic_gray) * 3, axis=-1) # 将灰度图片1通道转换成3通道
方法二
pic_gray = cv2.merge((pic_gray, pic_gray, pic_gray)) # 将灰度图片1通道转换成3通道
图片组合
pic1[100:200, 100:200] = pic2[300:400, 400:500] # 矩阵大小必须要统一
2)图片缩放(cv2.resize())
pic_resize = cv2.resize(pic, (200, 200))
cv2.resize(src, dsize)
src:要调整大小的输入图像;
dsize:输出图像的大小,可以是一个元组,例如(宽,高),或者使用整