自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 OpenCV交互式前景提取使用GrabCut算法

算法工作原理:最初,用户在前景区域周围绘制一个矩形(前景区域应完全位于矩形部)。然后,算法会对其进行迭代分割,以获得最佳结果。做完了但在某些情况下,分割可能不会很好,例如,可能已将某些前景区域标记为背景,反之亦然。在这种情况下,需要用户进行精修。只需在图像错误分割区域上画些笔画。然后在下一次迭代中,将获得更好的结果。主要使用cv.grabCut()函数来实现。grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode) -> mas

2021-09-27 17:08:33 580

原创 OpenCV图像分割与Watershed算法

这里使用一个有关如何使用距离变换和分水岭来分割相互接触的对象的例子来说明分水岭算法的用法。使用Otsu二值化寻找目标的近似估计代码示例:from matplotlib import pyplot as pltimport numpy as npimport cv2 as cvimg = cv.imread("C:\\Users\\dell\\Desktop\\prac files\\prac18.jpg")img_gray = cv.cvtColor(img, cv.COLOR_BGR2G

2021-09-26 19:54:24 317

原创 OpenCV霍夫圈变换

主要使用cv.HoughCircles()函数来实现。cv2.HoughCircles(image,method,dp,minDist[, circles[,param1, param2[,minRadius[,maxRadius]]]]])参数如下:image:输入矩阵method:cv2.HOUGH_GRADIENT 也就是霍夫圆检测,梯度法dp:计数器的分辨率图像像素分辨率与参数空间分辨率的比值(官方文档上写的是图像分辨率与累加器分辨率的比值,它把参数空间认为是一个累加器,毕竟里面存储的

2021-09-09 22:27:53 184

原创 OpenCV霍夫线变换

1.原理一条线可以表示为y = mx + c或以参数形式表示为ρ=xcosθ+ysinθ,其中ρ是从原点到该线的垂直距离,而θ是由该垂直线和水平轴形成的角度以逆时针方向测量(该方向随如何表示坐标系而变化)任何一条线都可以用(ρ,θ)这两个术语表示。因此,首先创建2D数组或累加器(以保存两个参数的值),并将其初始设置为0。让行表示ρ,列表示θ。阵列的大小取决于所需的精度。假设您希望角度的精度为1度,则需要180列。对于ρ,最大距离可能是图像的对角线长度。因此,以一个像素精度为准,行数可以是图像的对角线长度

2021-09-04 20:26:28 217

原创 OpenCV模板匹配

1.OpenCV中的模板匹配主要使用matchTemplate()函数来实现。matchTemplate(image, templ, result, method )参数如下:image:待匹配的源图像templ:模板图像result:保存结果的矩阵method:模板匹配的算法

2021-09-03 18:18:43 148

原创 OpenCV傅里叶变换

傅立叶变换用于分析各种滤波器的频率特性。图像中的振幅在边缘点或噪声急剧变化。因此,可以说边缘和噪声是图像中的高频内容。如果幅度没有太大变化,则它是低频分量。1.Numpy中的傅里叶变换主要使用np.fft.fft2()、np.fft.fftshift()以及20*np.log(np.abs(fshift))函数来实现。np.fft.fft2()numpy.fft.fft2(img, s=None, axes=(-2, -1), norm=None)参数如下:img:输入图像(二维数组),即灰

2021-09-02 16:58:16 866

原创 OpenCV直方图-反投影

反投影用于图像分割或在图像中查找感兴趣的对象。1.利用Numpy实现首先,需要计算要查找的对象(使其为“ M”)和要搜索的图像(使其为“ I”)的颜色直方图求出比值R = M/I。然后反向投影R,即使用R作为调色板,并以每个像素作为其对应的目标概率创建一个新图像。即B(x,y) = R[h(x,y),s(x,y)。其中h是色调,s是像素在(x,y)的 饱和度。之后,应用条件B(x,y) =min[B(x,y), 1]对B应用卷积,内核使用圆盘内核现在最大强度的位置给了我们物体的位置。如果期望图像

2021-08-30 23:06:43 119

原创 OpenCV直方图-二维直方图

1.计算二维直方图OpenCV中的二维直方图主要使用cv.calcHist()函数来实现。函数具体介绍见OpenCV直方图-查找、绘制和分析.对于颜色直方图,我们需要将图像从BGR转换为HSV。对于二维直方图,其参数将进行如下修改:channel = [0,1],因为我们需要同时处理H和S平面。bins = [180,256] ,对于H平面为180,对于S平面为256。range = [0,180,0,256], 色相值介于0和180之间,饱和度介于0和256之间。代码示例:impo

2021-08-30 22:09:07 628

原创 OpenCV直方图-均衡

考虑这样一个图像,它的像素值仅局限于某个特定的值范围。例如,较亮的图像将把所有像素限制在高值上。但是一幅好的图像会有来自图像所有区域的像素。因此,需要将这个直方图拉伸到两端,这就是直方图均衡化的作用。这通常会提高图像的对比度。1.使用Numpy实现代码示例:from matplotlib import pyplot as pltimport numpy as npimport cv2 as cvimg = cv.imread('C:\\Users\\dell\\Desktop\\prac fil

2021-08-30 19:07:57 114

原创 OpenCV直方图-查找、绘制和分析

1.查找直方图直方图是在X轴上具有像素值(不总是从0到255的范围),在Y轴上具有图像中相应像素数的图。通过查看图像的直方图,可以直观地了解该图像的对比度,亮度,强度分布等。相关概念BINS:直方图显示每个像素值的像素数。若需要256个值来显示上直方图即从0到255,则bin的数量为256个(每个像素一个);若需要找到介于0到15之间的像素数,然后找到16到31之间,…,240到255之间的像素数。只需要16个值即可表示直方图,这种情况bin的数量仅为16个。DIMS:收集数据的参数的数

2021-08-29 23:53:11 360

原创 OpenCV轮廓分层

OpenCV中的分级表示每个轮廓都有它自己的信息关于它是什么层次,谁是它的孩子,谁是它的父母等等。OpenCV将它表示为一个包含四个值的数组: [Next, Previous, First_Child, Parent],如果没有子元素或父元素,则该字段被视为-1。Next表示同一层次的下一个轮廓。Previous表示同一层次上的先前轮廓。First_Child表示它的第一个子轮廓。Parent表示其父轮廓的索引。轮廓检索模式1. RETR_LIST它只是检索所有的轮廓,但不创建任何亲子关

2021-08-29 00:05:26 262

原创 OpenCV轮廓属性

1.长宽比长宽比是对象边界矩形的宽度与高度的比值。代码示例:x,y,w,h = cv.boundingRect(cnt)aspect_ratio = float(w)/h2.范围范围是轮廓区域与边界矩形区域的比值。代码示例:area = cv.contourArea(cnt) x,y,w,h = cv.boundingRect(cnt)rect_area = w*hextent = float(area)/rect_area3.坚实度坚实度是等高线面积与其凸包面积之比。代码示例

2021-08-28 21:28:45 597

原创 OpenCV轮廓特征

1.特征矩主要使用cv.moments()函数来实现。cv.moments ( InputArray array, bool binaryImage = false ) 参数如下:array:输入数组,可以是光栅图像(单通道,8-bit或浮点型二维数组),或者是一个二维数组(1 X N或N X 1),二维数组类型为Point或Point2fbinaryImage:默认值是false,如果为true,则所有非零的像素都会按值1对待,也就是说相当于对图像进行了二值化处理,阈值为1,此参数仅对

2021-08-26 17:49:17 440

原创 OpenCV轮廓的查找和绘制

1.查找轮廓OpenCV中查找轮廓就是黑色背景中找白色物体,即要找到的对象应该是白色,背景应该是黑色。主要使用cv.findCounters()函数。cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 参数如下:image:寻找轮廓的图像mode:表示轮廓的检索模式,具体如下:参数名称含义cv2.RETR_EXTERNAL表示只检测外轮廓cv2.RETR_LIST

2021-08-24 23:02:26 1219

原创 OpenCV图像金字塔

1.高斯金字塔主要使用cv.pyrDown()函数和cv.pyrUp()函数。cv.pyrDown()函数从一个高分辨率大尺寸的图像向上构建一个金字塔(尺寸变小,分辨率降低。cv2.pyrDown(src, dst=None, dstsize=None, borderType=None)参数如下:src:表示输入图像dst:表示输出图像dstsize:表示输出图像的大小borderType:表示图像边界的处理方式cv2.pyrUp()函数从一个低分辨率小尺寸的图像向下构建一个金子塔(

2021-08-22 19:59:32 120

原创 OpenCV Canny边缘检测

OpenCV的Canny Edge检测主要使用cv.Canny()函数。edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 参数如下:image:需要处理的原图像,该图像必须为单通道的灰度图threshold1:阈值1threshold2:阈值2其中较大的阈值2用于检测图像中明显的边缘,但一般情况下检测的效果不会那么完美,边缘检测出来是断断续续的。所以这时候用较小的第一

2021-08-22 17:52:23 213

原创 OpenCV图像梯度

OpenCV提供三种类型的梯度滤波器或高通滤波器,即Sobel,Scharr和Laplacian。1.Sobel算子主要使用cv2.Sobel()来实现。dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])参数如下:src:需要处理的图像ddepth:图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度dx和dy表示的是求导的阶数,0表示这个

2021-08-21 22:48:07 129

原创 OpenCV形态学转换

1.侵蚀主要使用cv2.erode()函数来实现。cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)#腐蚀函数参数如下:src:需要腐蚀和膨胀的图像源矩阵kernel:核矩阵dst:返回结果矩阵anchor:核矩阵锚点,不传值或传值为(-1,-1)则取核矩阵的中心位置作为锚点iterations:迭代次数,每多迭代一次相当于以该值为1返回的结果作

2021-08-21 22:11:23 186

原创 OpenCV图像平滑

1.2D卷积(图像过滤)dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])参数如下:src:原图像dst:目标图像,与原图像尺寸和通过数相同ddepth:目标图像的所需深度kernel:卷积核(或相当于相关核),单通道浮点矩阵anchor:内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心。detal:在将它们存储在dst中之前,将可选值添加到

2021-08-21 21:14:35 96

原创 OpenCV图像阈值

1.简单阈值主要使用cv.threshold()函数来实现。详见OpenCV对于图像的算术运算2.自适应阈值主要使用cv.adaptiveThreshold()函数来实现。cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)参数如下:src:单通道原图像maxValue:填充色,取值范围为(0~255),输出图像中灰度值最大值adaptiveMethod:自

2021-08-21 17:47:00 81

原创 OpenCV图像的几何变化

图像主要的几种变换主要使用cv.warpAffine()函数实现图像的、平移、 旋转、仿射变换等功能。cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst其中:src - 输入图像。M - 变换矩阵。M作为仿射变换矩阵,一般反映平移或旋转的关系,为InputArray类型的2×3的变换矩阵。dsize - 输出图像的大小,其形式应为 (width,height) ,width =列

2021-08-21 16:21:03 96

原创 OpenCV改变颜色空间

1.改变颜色空间主要使用cvtColor(input_image, flag)来实现,有两个参数:①输入图片②转换类型,主要有以下几种:类型函数RGB和BGR(opencv默认的彩色图像的颜色空间是BGR)颜色空间的转换cv.COLOR_BGR2RGBcv.COLOR_RGB2BGRcv.COLOR_RGBA2BGRAcv.COLOR_BGRA2RGBA向RGB和BGR图像中增添alpha通道cv.COLOR_RGB2RGBAcv.COLOR_BGR2BGRA从R

2021-08-20 23:51:11 280

原创 OpenCV性能衡量和提升技术

1.使用OpenCV衡量性能主要使用cv.getTickCount()和cv.getTickFrequency()函数。cv.getTickCount()函数返回从参考事件(如打开机器的那一刻)到调用此函数那一刻之间的时钟周期数。因此,如果在函数执行之前和之后调用它,则会获得用于执行函数的时钟周期数。cv.getTickFrequency()函数返回时钟周期的频率或每秒的时钟周期数。time.time()函数返回当前时间的时间戳。代码示例:import cv2 as cvimport ti

2021-08-18 23:01:46 499

原创 OpenCV对于图像的算术运算

1.图像加法通过cv.add()来实现,代码示例:import numpy as npimport cv2 as cvx = np.uint8([250])y = np.uint8([10])print(x+y)print(cv.add(x,y))需要注意的是,OpenCV加法是饱和运算,而Numpy加法是模运算。

2021-08-18 14:19:12 1374

原创 OpenCV对图像的一些基本操作

1.访问和修改像素值有两种方法,代码示例:import numpy as npimport cv2 as cvimg = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')#方法一print(img[100,100])print(img[100,100,2])img[100,100,2] = 150print(img[100,100,2])#方法二print(img.item(100,100,2))img.items

2021-08-17 23:14:29 95

原创 OpenCV轨迹栏

。。

2021-08-17 21:45:14 140

原创 OpenCV处理鼠标事件

OpenCV中使用cv.setMouseCallback()来处理鼠标事件。1.参数详解这个函数一共有三个参数,分别为窗口名称鼠标回调函数,即鼠标事件发生时要执行的函数传回给回调函数的参数2.回调函数详解回调函数一般格式为:函数名(event, x, y, flags, param)event: CV_EVENT_* 变量之一,CV_EVENT 见下表参数名对应操作EVENT_MOUSEMOVE 0滑动EVENT_LBUTTONDOWN 1左键点击

2021-07-21 19:52:13 1219 1

原创 OpenCV绘图功能

在绘制任何图形之前,需要先使用np.zeros()来创建一个黑色图像。np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型。代码示例: img = np.zeros((512,512,3), np.uint8)512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色uint8是用0-255表示所有颜色。1.画线cv.line()共7个参数,分别为:①要在上面画线的图像对象②线段起点坐标③线段终点坐标④线段颜色⑤线段厚度⑥线段类型

2021-07-21 18:42:35 604 1

原创 OpenCV读取、保存视频

1.从相机中读取视频①用cv.VideoCapture()创建一个对象来绑定所要选择的摄像头。参数为0、-1:选择第一个摄像头(一般是电脑上自带的摄像头)参数为1:选择第二个摄像头②用isOpened()检查所创建的VideoCapture对象是否被初始化,若为True,则已经初始化。若为False,则需要使用open()打开。③用read()进行逐帧捕获,这个函数会返回两个值,第一个值是布尔类型,若为True,则读帧正确。第二个值即为读取的帧。④最后将帧使用cv.imshow()进行显示即

2021-07-19 19:52:24 1613

原创 OpenCV读取、显示、写入图像

1. cv.imread()用于读取图像。参数一:图像的路径(工作目录下图像名字或完整路径)。参数二:指定读取图像的方式。①cv.IMREAD_COLOR(或整数1):加载彩色图像(RGB三通道)(默认值)②cv.IMREAD_GRAYSCALE(或整数0):加载灰度图像③cv.IMREAD_UNCHANGED(或整数-1):加载图像,包括alpha通道(全通道)2. cv.imshow()用于显示图像参数一:窗口名称。参数二:需要显示的图像对象。代码示例:import cv2

2021-07-19 17:09:28 374

空空如也

空空如也

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

TA关注的人

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