赞
踩
OpenCV是一个基于BSD许可(开源)发行的跨平台的计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV在图像分割、人脸识别、物体识别、动作跟踪、动作分析、机器视觉等领域都有广泛的应用。
以下是OpenCV的基本操作及其应用案例。
1.1 读取、显示以及保存操作
importcv2image = cv2.imread(“test.jpg”)# 读取操作cv2.imshow(“test”, image)# 显示操作cv2.waitKey()# 等待按键cv2.imwrite(“save.jpg”)# 保存操作复制代码
1.2 改变色彩空间
image = cv2.imread(“test.jpg”)hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 转换到HSV空间hls = cv2.cvtColor(image, cv2.COLOR_BGR2HLS)# 转换到HLS空间lab = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)# 转换到Lab空间gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 转换到GRAY空间(灰度图)复制代码
HSV这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V),该模型常用来做绿幕分割。
在图像检测中,可以对样本进行色彩空间转换实现数据增强,如将训练数据直接转换到HSV空间,或者调整V(明度)通道的大小,改变图片的明暗,再转到BGR格式。
1.3 几何变换–缩放、平移、旋转
a. 缩放
image = cv2.imread(“test.jpg”)resize = cv2.resize(image, (), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)# 长宽缩小到0.5倍复制代码
b. 平移
在对图像作平移操作时,需创建2行3列变换矩阵,M矩阵表示水平方向上平移为x,竖直方向上的平移距离为y。
importcv2importnumpyasnpimage = cv2.imread(“test.jpg”)rows, cols, channels = image.shapeM = np.float32([[1,0,100],[0,1,50]])res = cv.warpAffine(image, M, (cols, rows))复制代码
c. 旋转
旋转所需的变换矩阵可以通过函数cv2.getRotationMatrix2D得到。
image = cv2.imread(‘test.jpg’)rows, cols, channels = image.shaperotate = cv2.getRotationMatrix2D((rows0.5, cols0.5),45,1)# 第一个参数:旋转中心点 第二个参数:旋转角度 第三个参数:缩放比例res = cv2.warpAffine(image, rotate, (cols, rows))复制代码
1.4 平滑处理–模糊、滤波
模糊滤波操作去除图像中的椒盐噪声、提高图像的对比度、实现锐化处理、提高立体感等。
image = cv2.imread(‘test.jpg’)blur = cv2.blur(image, (5,5))# 均值滤波 第二个参数是卷积核大小median_blur = cv2.medianBlur(image,5)# 中值滤波gaussian_blur = cv2.GussianBlur(image, (5,5))# 高斯模糊复制代码
1.5 膨胀、侵蚀
a. 图像形态学操作
图像形态学操作是基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学。
形态学有四个基本操作:侵蚀、膨胀、开、闭
膨胀与腐蚀是图像处理中最常用的形态学操作手段
膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。侵蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域
b. 膨胀与侵蚀
它们能实现多种多样的功能,主要如下:
消除噪声
分割出独立的图像元素,在图像中连接相邻的元素
寻找图像中的明显的极大值区域或极小值区域
求出图像的梯度
image = cv2.imread(“test.jpg”)kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))# 获取卷积核eroded = cv2.erode(image, kernel)# 腐蚀图像dilated = cv2.dilate(image, kernel)# 膨胀图像复制代码
c. 开运算和闭运算
开运算:先腐蚀后膨胀,用于移除由图像噪音形成的斑点
闭运算:先膨胀后腐蚀,用来连接被误分为许多小块的对象
1.6 查找绘制轮廓
a. 查找轮廓
轮廓查找在图像检测领域有很广泛的应用,比如查找图像中明显的色块、条纹、物体边缘等等,查找轮廓前先要对图像进行二值化处理。
opencv版本大于3contours, hierarchy = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)# 第一个参数:查找的二值图像 第二个参数:轮廓检索模式 第三个参数:轮廓近似方法# 返回值contours为查找到的轮廓列表,hierarhy为轮廓之间的层级关系复制代码
b. 绘制轮廓
查找到轮廓后可以通过drawContours函数绘制出轮廓
cv2.drawContours(temp,contours,-1,(0,255,0),3)# 第一个参数:画布,可以是原图 第二个参数:查找到的轮廓 第三个参数:-1表示全画 第四个参数:颜色 第五个参数:轮廓宽度复制代码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。