OpenCV简介及其工程应用-图像处理

OpenCV是一个基于BSD许可(开源)发行的跨平台的计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV在图像分割、人脸识别、物体识别、动作跟踪、动作分析、机器视觉等领域都有广泛的应用。

以下是OpenCV的基本操作及其应用案例。

  1. 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表示全画 第四个参数:颜色 第五个参数:轮廓宽度复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值