opencv图像增强python_用python opencv numpy和sklearn进行数据增强

在没有其他的方式进行搜集图片时,数据增强是一种增加图片多样性的非常好的方式。在机器学习中特别是深度神经网络,数据是非常重要的,数据甚至可以提升网络一个量级。在训练的时候,我们需要成千上万张图片,甚至上千万的图片。

搜集这些图片,是非常繁琐的事情,但是有非常重要。没有好的数据可以说模型也就没啥用了。这里就有了不同的数据增强的方式。其中比较常用的数据增强的方式是:翻转,拉平,裁剪,对比度等等。这样可以将原来比较少的图片增加到可观的数量。

即使是世界上最强大的模型,如果没有了数据,那它啥也不是

在本文中进行介绍将200多张图片,通过数据增强的方式增加到2000多张。使用的工具是numpy,opencv,sklearn以及python等工具。即使是刚入门的新手可以轻松使用。图片中包括一些rgb图像,也有一些灰度图。灰度图和rgb图像最大的不同是图像的通道数不同,rgb3通道,灰度图单通道。

numpy是一个使用起来非常简单的矩阵库,可以对矩阵进行各种操作,我们的图片就是一个矩阵,所以使用numpy对图像进行处理也非常简单。

下面是我们的一些操作:

翻转:我们要进行翻转图片,首先就要对图片的行和列进行翻转,即:第一列和最后一列进行交换,然后整个矩阵执行这个操作。numpy中有个方法可以实现:fliplr() 实现对矩阵进行水平翻转。如果是列进行翻转,numpy也有个函数实现:flipud(),下面是效果:

旋转:旋转实现我们使用的是sklearn库,sklearn可以对图像进行添加噪声,滤波等操作。如果是顺时针旋转,我们只要给函数一个负值,如果给函数一个正值,图片会进行逆时针旋转。下面是实现的效果。

变化:我们可以通过改变图像上的一些数值例如上,下,左,右,进而改变图片中的某些信息的位置。例如我们根据下面的公式去调整图中信息的位置。

\( X = x + dx \)

\( Y = y + dy \)

这时就会原来的位置 \( x,y \) 就会改变为新的位置 \( X,Y \)

添加噪声:我们使用sklearn库中的random_noise(),对图片进行随机添加噪声,这样做的好处是使图像的噪声达到正则化的目的,这个可以解决一些过拟合问题。

滤波:这里滤波使用的是高斯滤波,使用的库时opencv库,函数为gaussian_blur(),我们通过改变滤波核的大小,进行修改滤波的结果。

现在我们使用所有的方法进行图像增强,我们首先将图片的名字存储到一个数组里,然后随机从数组里取出一张图片,对这个图片进行随机操作,操作方式是按照上面的操作方式进行。就是随机变换。直到变换的图片达到2000张。

下面是我们的代码,我们对每一种操作都进行了函数定义,然后通过主函数进行调用。

我们来看下主函数,读取完图片后然后随机的进行图片变换

这里有两个路径,一个是读取原图片的路径,一个是保存图片的路径。

一旦外部while循环从图像数组中选择了一个随机图像,我们将读取该图像。从随机库中随机选取适用于读取图像的变换次数。这个外循环将运行,直到计数(I)达到2000(要生成的图像数)。

如果上述操作完成,我们的图像就增加到了2000张,即目标完成。这里有下载图片链接 图片 这里还有整个项目的 代码

声明:本文为原创,作者为 lijingle,转载时请保留本声明及附带文章链接:https://www.lijl888.com/archives/1330

感谢您的支持

感谢您的支持

感谢您的支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像轮廓识别是一种常见的图像处理技术,可以用于物体检测、边缘检测、模式识别等领域。Python中的OpenCV库提供了丰富的图像处理功能,包括图像轮廓识别功能。下面介绍如何使用Python Opencv实现图像轮廓识别功能。 1. 导入库 首先需要导入OpenCV库。可以使用以下代码导入: ```python import cv2 import numpy as np ``` 2. 读取图像并转化为灰度图像 使用cv2.imread()函数读取图像,并使用cv2.cvtColor()函数将图像转化为灰度图像。代码如下: ```python img = cv2.imread("image.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` 3. 进行图像处理 在进行轮廓识别前,需要对图像进行一些处理,如图像平滑、二值化等。这里使用cv2.GaussianBlur()函数进行高斯平滑处理,并使用cv2.threshold()函数进行二值化处理。代码如下: ```python blur = cv2.GaussianBlur(gray, (5, 5), 0) ret, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY) ``` 4. 进行轮廓识别 使用cv2.findContours()函数进行轮廓识别。该函数返回一个轮廓列表和一个层次结构。代码如下: ```python contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ``` 5. 绘制轮廓 使用cv2.drawContours()函数绘制轮廓。代码如下: ```python cv2.drawContours(img, contours, -1, (0, 255, 0), 2) ``` 6. 显示图像 使用cv2.imshow()函数显示图像,并使用cv2.waitKey()函数等待按键。代码如下: ```python cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 完整代码如下: ```python import cv2 import numpy as np img = cv2.imread("image.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) ret, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY) contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0, 255, 0), 2) cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 运行代码后,将显示原图像和识别出的轮廓。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值