自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 OpenCV-Python官方教程-21-使用GrabCut算法进行交互式前景提取

1 原理(略)2 代码演示OpenCV 提供了函数:cv2.grabCut()。我们来先看看它的参数:img:输入图像mask:掩膜图像,用来确定那些区域是背景、前景,可能是背景/前景等。可以设置为:cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或者直接输入 0,1,2,3 也行。rect:包含前景的矩形,格式为(x,y,w,h)bgModel,bgModel:算法内部使用的数组. 你只需要创建两个大小为 (1,65),数据类型为 np.

2020-09-30 00:09:59 731

原创 OpenCV-Python官方教程-20-分水岭算法图像分割

1 原理任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水。随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝直到所有的山峰都被水淹没。我们构建好的堤坝就是对图像的分割。这就是分水岭算法的背后思想。但是这种方法通常都会得到过度分割的结果,这是由噪声或者图像中其他不规律的因素造成的。为了减少这种影响OpenCV 采用了基于掩模的分水岭算法,在这

2020-09-29 11:46:54 719

原创 OpenCV-Python官方教程-19-Hough直线变换和Hough圆环变换

1 .Hough直线变换1.1 cv2.HoughLines()在 OpenCV 中都被封装进了一个函数:cv2.HoughLines()。返回值就是(ρ, θ)。ρ 的单位是像素,θ 的单位是弧度。这个函数的第一个参数是一个二值化图像,所以在进行霍夫变换之前要首先进行二值化,或者进行Canny 边缘检测。第二和第三个值分别代表 ρ 和 θ 的精确度。第四个参数是阈值,只有累加其中的值高于阈值时才被认为是一条直线,也可以把它看成能检测到的直线的最短长度(以像素点为单位)。演示代码:import cv2

2020-09-28 13:47:13 679

原创 OpenCV-Python官方教程-18-模板匹配

模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。OpenCV 为我们提供了函数:cv2.matchTemplate()。和 2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置对模板图像和与其对应的输入图像的子区域进行比较。OpenCV 提供了几种不同的比较方法(细节请看文档)。返回的结果是一个灰度图像,每一个像素值表示了此区域与模板的匹配程度。如果输入图像的大小是(WxH),模板的大小是(wxh),输出的结果的大小就是(W-w+1,H-h+1)。当你得到这幅图之后,就可以使用函

2020-09-27 13:40:01 386

原创 Python报错UnboundLocalError: local variable ‘val‘ referenced before assignment

看下面的代码:def get_frame(self): KSIZE = 11 ALPHA = 2 kernel = cv2.getGaussianKernel(KSIZE, 0) kernel = -ALPHA * kernel @ kernel.T kernel[KSIZE // 2, KSIZE // 2] += 1 + ALPHA filtered = cv2.filter2D(self.img, -1, kernel) gray = cv2

2020-09-26 19:26:58 1420

原创 PaddleOCR超轻量级中文OCR模型使用(windows爬坑)

1.第一个坑: 出现在Recognition model下载解压,也就是下图这个文件,我用自己的笔记本和一个台式机解压,两台机器均是windows的系统,并没有出现,教程里说的model和params文件。反复尝试无果后,我用朋友的Mac解压了这个模型文件,问题解决!目前只知道如何解决这个问题,但是然不知其因。2.第二个坑: 出现在模型使用中,官方给的调用命令行如下:# If you want to use the CPU for prediction, you need to set the use

2020-09-25 23:25:03 4827 4

原创 Pytorch基础-05-迁移学习-02(VGG16、ResNet50之猫狗分类)

1.迁移VGG16下面看看迁移学习的具体实施过程,首先需要下载已经具备最优参数的模型,这需要对我们之前使用的model = Models()代码部分进行替 换,因为我们不需要再自己搭建和定义训练的模型了,而是通过代码自 动下载模型并直接调用,具体代码如下:from torchvision import modelsmodel = models.vgg16(pretrained=True)print (model)在以上代码中,我们指定进行下载的模型是VGG16,并通过设置 prepare=Tr.

2020-09-25 22:49:35 2701

原创 Pytorch基础-05-迁移学习-01(自定义VGGNet之猫狗分类)

什么是迁移学习?在深度神经网络 算法的应用过程中,如果我们面对的是数据规模较大的问题,那么在搭 建好深度神经网络模型后,我们势必要花费大量的算力和时间去训练模 型和优化参数,最后耗费了这么多资源得到的模型只能解决这一个问 题,性价比非常低。如果我们用这么多资源训练的模型能够解决同一类 问题,那么模型的性价比会提高很多,这就促使使用迁移模型解决同一 类问题的方法出现。因为该方法的出现,我们通过对一个训练好的模型 进行细微调整,就能将其应用到相似的问题中,最后还能取得很好的效 果;另外,对于原始数据较少的.

2020-09-25 17:41:09 892 4

原创 os.path类的方法

(1)os.path.dirname:用于返回一个目录的目录名,输入参数为文件的目录。a = os.path.dirname('C:\\Users\\22\\Desktop\\PaddleOCR-develop\\')b = os.path.dirname('C:\\Users\\22\\Desktop\\PaddleOCR-develop')print (a)print (b)C:\Users\22\Desktop\PaddleOCR-developC:\Users\22\Desktop

2020-09-25 17:02:21 194

原创 GPU显存爆炸如何解决?

问题:在使用GPU训练网络时,出现RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.17 GiB total capacity; 134.77 MiB already allocated; 8.56 MiB free; 3.23 MiB cached),自己明明11G的显存,为啥还给占满了。1 .nvidia-smi查看GPU状态:这时我们发现Memory-Usage(显存使用率)几乎占满了,而Volatil

2020-09-25 11:13:34 10365

原创 Pytorch基础-04-实战手写数字识别

我们现在已经学会了基于PyTorch深度学习框架高效、快捷地搭建一个神经网络,并对模型进行训练和对参数进行优化的方法,接下来让我们小试牛刀,基于PyTorch框架使用神经网络来解决一个关于手写数字识别的计算机视觉问题,评价我们搭建的模型的标准是它能否准确地对手写数字图片进行识别。其具体过程是:先使用已经提供的训练数据对搭建好的神经网络模型进行训练并完成参数优化;然后使用优化好的模型对测试数据进行预测,对比预测值和真实值之间的损失值,同时计算出结果预测的准确率。在将要搭建的模型中会用到卷积神经网络模型,下面

2020-09-23 18:01:05 399

原创 Pytorch基础-03-模型搭建和参数优化

如何基于PyTorch深度学习框架用简单快捷的方式搭建出复杂的神经网络模型,同时让模型参数的优化方法趋于高效。如同使用PyTorch中的自动梯度方法一样,在搭建复杂的神经网络模型的时候,我们也可以使用PyTorch中已定义的类和方法,这些类和方法覆盖了神经网络中的线性变换、激活函数、卷积层、全连接层、池化层等常用神经网络结构的实现。在完成模型的搭建之后,我们还可以使用PyTorch提供的类型丰富的优化函数来完成对模型参数的优化,除此之外,还有很多防止模型在模型训练过程中发生过拟合的类。1 torch.n

2020-09-23 11:52:53 413

原创 Pytorch基础-02-自动梯度

在PyTorch中提供了一种非常方便的方法,可以帮助我们实现对模 型中后向传播梯度的自动计算,避免了“重复造轮子”,这就是接下来要 重点介绍的torch.autograd包。通过使用 torch.autograd 包,可以使模型参 数自动计算在优化过程中需要用到的梯度值,在很大程度上帮助降低了 实现后向传播代码的复杂度。1 torch.autograd和Variabletorch.autograd包的主要功能是完成神经网络后向传播中的链式求 导,手动实现链式求导的代码会给我们带来很大的困扰,而 to

2020-09-23 10:47:06 807

原创 Pytorch基础-01-Pytorch中的Tensor

Tensor在PyTorch中负责存储基本数据,PyTorch 针对Tensor也提供了丰富的方法,PyTorch中的Tensor与NumPy数组具有极高的相似性。1.1 Tensor的数据类型(1)torch.FloatTensor:用于生成数据类型为浮点型的Tensor,传 递给torch.FloatTensor的参数可以是一个列表,也可以是一个维度值。(2)(3)(4)(5)(6)...

2020-09-23 10:11:31 432

原创 OpenCV-Python官方教程-17-图像变换(傅里叶变换)

傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用2D离散傅里叶变换 (DFT) 分析图像的频域特性。实现 DFT 的一个快速算法被称为快速傅里叶变换(FFT)。边界和噪声是图像中的高频分量(注意这里的高频是指变化非常快,而非出现的次数多)。如果没有如此大的幅度变化我们称之为低频分量。1.1 Numpy中的傅里叶变换Numpy 中的 FFT 包可以帮助我们实现快速傅里叶变换。函数 np.fffft.fffft2() 可以对信号进行频率转换,输出结果是一个复杂的数组。本函数的第一个参数是输入图.

2020-09-21 10:59:28 489

原创 Pytorch学习系列-04-构建卷积神经网络实现CIFAR-10图片分类

对CIFAR-10数据集进行图像分类。数据集中的图像大小为32x32x3。定义卷积神经网络的结构这里,将定义一个CNN的结构。将包括以下内容:(1)卷积层:可以认为是利用图像的多个滤波器(经常被称为卷积操作)进行滤波,得到图像的特征。(2)通常,我们在 PyTorch 中使用 nn.Conv2d 定义卷积层,并指定以下参数:nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0)(3)池化层:这里采用的最大池化.

2020-09-21 00:23:49 2558

原创 Pytorch学习系列-03-构建卷积神经网络实现手写数字识别(Mnist数据集)

涉及到主要知识点是如何使用torch.nn.Module这个基类来实现一个网络结构定义。这个基类中最重要的是实现自己的forward方法,这个也是自定义网络结构的实现方法。保存了模型之后,还可以转化为ONNX格式,把模型送给OpenCV DNN模块调用。1.网络训练、验证及模型导出与转换代码:import torchfrom torch.utils.data import DataLoaderimport torchvision#预处理数据transfrom = torchvision..

2020-09-20 08:59:08 820 1

原创 Pytorch学习系列-02-构建浅层神经网络实现手写数字识别(Mnist数据集)

Pytorch搭建简单神经网络完成手写数字识别,其中利用到的知识点如下:(1)用torch.nn包里面的函数搭建网络(2)Torchvision.transofrms来做数据预处理(3)DataLoader简单调用处理数据集(4)模型保存为pt文件与加载调用下面看完整的代码:"""1.使用torch.nn包里面的搭建网络2.Torchvision.transofrms来做数据处理3.DataLoader简单调用处理数据集4.模型保存为pt文件与加载调用"""import tor.

2020-09-19 17:38:29 397

原创 OpenCV-Python官方教程-16-直方图均匀化、2D直方图和直方图反向投影

直方图均衡化如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛。所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况下这种操作会改善图像的对比度。1.1 先查原图的灰度直方图import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('apple.jpg',0)flatten()将数组变成一维的hist,bin.

2020-09-19 12:48:21 946

原创 OpenCV-Python官方教程-15-直方图的计算、绘制与分析

什么是直方图呢?通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的点的数目。直方图其实就是对图像的另一种解释,通过直方图我们可以对图像的对比度,亮度,灰度分布等有一个直观的认识。统计直方图函数 cv2.calcHist (images,channels,mask,histSize,ranges)可以帮助我们统计一幅图像的直方图。其中,(1)images是原图,当传入函数时应该用中括号[]括起来,例如:[img]。(2).

2020-09-18 11:48:45 423

原创 OpenCV-Python官方教程-14-轮廓的层次结构

用函数 cv2.fifindContours 来查找轮廓,我们需要传入第二个参数:轮廓提取模式(Contour_Retrieval_Mode)。还有些情况,一个形状在另外一个形状的内部。这种情况下我们称外部的形状为父,内部的形状为子。按照这种方式分类,一幅图像中的所有轮廓之间就建立父子关系。这样我们就可以确定一个轮廓与其他轮廓是怎样连接的,比如它是不是某个轮廓的子轮廓,或者是父轮廓。这种关系就成为组织结构。OpenCV 使用一个含有四个元素的数组表示。[Next,Previous,First_Chil.

2020-09-18 00:21:04 203

原创 OpenCV-Python官方教程-13-图像轮廓(轮廓绘制,轮廓特征(面积,周长,重心,边界框))、轮廓性质

什么是轮廓?轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。函数 cv2.fifindContours() 有三个参数,第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。函数 cv2.drawContours() 可以被用来绘制轮廓。它可以根据你提供的边界点绘制任何形状。它的第一个参数是原始图像,第二个参数是轮廓,一个 P.

2020-09-17 00:29:51 4573 1

原创 Pytorch学习系列-01-环境搭建与基本语法

环境搭建参考如下链接就好:https://pytorch.org/Pytorch基本语法1.导入库,查看torch版本from __future__ import print_functionimport torchimport numpy as npprint (torch.__version__)1.5.0+cpu2.定义矩阵#定义矩阵x = torch.empty(2,2)print (x)tensor([[-6.2004e+22, 4.5916e-41]..

2020-09-15 23:28:42 214

原创 OpenCV-Python官方教程-12-图像金字塔以及图像融合

高斯金字塔高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的。顶部图像中的每个像素值等于下一层图像中5 个像素的高斯加权平均值。这样操作一次一个 M x N 的图像就变成了一个 M/2 x N/2 的图像。所以这幅图像的面积就变为原来图像面积的四分之一。这被称为Octave。连续进行这样的操作我们就会得到一个分辨率不断下降的图像金字塔。import cv2img = cv2.imread('x.png')lower_reso = cv2.pyrDown(img)higer_reso2 .

2020-09-15 10:58:48 394

原创 OpenCV-Python官方教程-11-Canny边缘检测

噪声去除由于边缘检测很容易受到噪声影响,所以第一步是使用 5x5 的高斯滤波器去除噪声。计算图像梯度对平滑后的图像使用 Sobel 算子计算水平方向和竖直方向的一阶导数(图像梯度)(Gx 和 Gy)。根据得到的这两幅梯度图(Gx 和 Gy)找到边界的梯度和方向,梯度的方向一般总是与边界垂直。梯度方向被归为四类:垂直,水平,和两个对角线。公式如下:非极大值抑制在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非边界上的点。对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向.

2020-09-13 15:39:12 270

原创 OpenCV-Python官方教程-10-图像梯度(Sobel,Scharr、Laplacian)

Sobel算子、Scharr算子Sobel(一阶导数)算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好。你可以设定求导的方向(xorder 或 yorder)。还可以设定使用的卷积核的大小(ksize)。如果 ksize=-1,会使用 3x3 的 Scharr 滤波器,它的的效果要比 3x3 的 Sobel 滤波器好(而且速度相同,所以在使用 3x3 滤波器时应该尽量使用 Scharr 滤波器)。3x3 的 Scharr 滤波器卷积核如下:Laplacian算子拉普拉斯算子(二阶导数)可.

2020-09-11 10:53:56 317

原创 将PNG格式图片转为JPG格式

先来说一下jpg图片和png图片的区别jpg格式:是有损图片压缩类型,可用最少的磁盘空间得到较好的图像质量png格式:不是压缩性,能保存透明等图from PIL import Imageimport cv2 as cvimport osdef PNG_JPG(PngPath): img = cv.imread(PngPath, 0) w, h = img.shape[::-1] infile = PngPath outfile = os.path.splitext.

2020-09-10 22:07:28 799

原创 OpenCV-Python图片添加椒盐噪声、高斯噪声

添加椒盐噪声import numpy as npimport randomimport cv2def sp_noise(image,prob): ''' 添加椒盐噪声 prob:噪声比例 ''' output = np.zeros(image.shape,np.uint8) thres = 1 - prob for i in range(image.shape[0]): for j in range(image.shape[1]): rdn =.

2020-09-10 11:45:13 2856 1

原创 OpenCV-Python官方教程-09-形态学转换(腐蚀,膨胀,开闭运算,礼帽,黑帽,形态学梯度运算)

腐蚀就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然是白色)。根据卷积核的大小靠近前景的所有像素都会被腐蚀掉(变为 0),所以前景物体会变小,整幅图像的白色区域会减少。这对于去除白噪声很有用,也可以用来断开两个连在一块的物体等。import cv2import numpy as np#腐蚀img = cv2.imread('str.jpg')ret,binary = cv2.threshold(img,127,255,cv2.THRESH_BINARY)kernel_1 =.

2020-09-10 11:28:42 354

原创 OpenCV-Python官方教程-08-图像滤波

2D卷积2D图像实施低通滤波(LPF),帮助我们去除噪音,模糊图像。高通滤波(HPF),帮助我们找到图像的边缘。可以自己创建卷积核,然后利用cv.fifilter2D(),进行各种图像卷积。## 2D卷积import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('x.png')kernel = np.ones((5,5),np.float32)/25#-1代表输出和输入的尺寸一样ds.

2020-09-09 15:49:40 295

原创 OpenCV-Python官方教程-07-图像阈值

简单阈值cv2.threshold(img,th,c,param),th是阈值,大于等与th的值判为c,否则判为0,param是不同的阈值方法。此函数有两个返回值,第一个retVal是阈值,第二个是阈值化之后的结果图。import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('x.png',0)ret,thresh1 = cv2.threshold(img,127,255,cv2.THRE.

2020-09-08 10:59:16 343

原创 OpenCV-Python官方教程-06-图像的放大缩小、平移、旋转、仿射、透射

放大缩小import cv2import numpy as npimg = cv2.imread('opencv.jpg')h,w,_ = img.shaperes1 = cv2.resize(img,(int(0.5*w),int(0.5*h)))res2 = cv2.resize(img,(2*w,2*h))cv2.imshow('res1',res1)cv2.imshow('res2',res2)cv2.imshow('img',img)cv2.waitKey(0)cv2.d.

2020-09-05 22:22:10 514

原创 OpenCV-Python官方教程-05-颜色空间转换、获取特定颜色图像、物体追踪

这里主要用到两个函数cv2.cvtColor(img,flag) 用图像的颜色空间转换,flag有很多种,主要用到有cv2.COLOR_BGR2GRAY、cv2.COLOR_BGR2HSV、cv2.COLOR_BGR2LAB等;cv2.inRange(img,lower_thrshold,upper_threshold) 在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。所以在使用这个函数的时候,我们首先需要将图像转换到HSV颜色空间中。lower_thrshold,upper_thr.

2020-09-05 17:04:10 540

原创 OpenCV-Python官方教程-04-图像上的算术运算(图像加法、图像混合、位运算)

图像加法cv2.add()# 图像加法x = np.uint8([250])y = np.uint8([10])print (cv2.add(x,y))) # 250+10 = 260 => 255print (x+y)# 250+10 = 260 % 256 = 4[[255]][4]图像混合cv2.addWeighted(img1,alpha,img2,(1-alpha),beta),将同等分辨率的图片,按比例混合叠加在一起。数学公示dst = α · img1 +.

2020-09-04 17:57:40 344

原创 OpenCV-Python官方教程-03-图像基础操作(获取修改像数值、图像属性、图像通道拆分合并,扩边)

获取修改像素值import cv2 import numpy as npimg = cv2.imread('x.png')px = img[100,100]print (px)blue = img[100,100,0]print (blue)px = [255,255,255]print (px)#修改一块区域roi = img[250:300,250:300]img[50:100,50:100] = roicv2.imshow('11',img)cv2.waitKey(0).

2020-09-04 11:57:31 372

原创 OpenCV-Python官方教程-02-绘图工具(线、矩阵、圆、椭圆、多边形,添加文字,填充多边形)

Opencv中绘图工具(线、矩形、圆、椭圆、多边形、添加文字、填充多边形):这里用到了三个函数:cv2.line();cv2.rectangle();cv2.circle();cv2.ellipse();cv2.putText(); cv2.polylines(); cv2.fillConvexPoly();cv2.fillPoly()cv2.line(img,dot1,dot2,color,thickness)cv2.rectangle(img,dot1,dot2,color,thickness

2020-09-01 18:42:50 750 1

opencv_face_detector.zip

1、opencv_face_detector_uint8;2、opencv_face_detector.pbtxt

2021-09-07

Kaggle"Dogs vs.Cats"项目数据集

在这个数据集的训练数据集中一共有 25000张猫和狗的图片,其中包含12500张猫的图片和12500张狗的图 片。在测试数据集中有12500张图片,不过其中的猫狗图片是无序混杂 的,而且没有对应的标签。这些数据集将被用于对模型进行训练和对参 数进行优化,以及在最后对模型的泛化能力进行验证。

2020-09-25

imglab.zip

下载后,打开README.txt查看使用,进入bulid--》Release,然后就可以看到imglab.exe文件

2019-11-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除