![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenCV-Python
文章平均质量分 55
X_Imagine
加油!!!
展开
-
OpenCV-Python —— 多图拼接、保存
多张图拼接保存,便于对比多张图的差别,适合算法效果对比原创 2023-06-01 09:41:21 · 554 阅读 · 0 评论 -
opencv-python——一些常见的报错(持续更新中)
opencv-python 常见报错汇总原创 2022-03-21 14:48:05 · 5056 阅读 · 0 评论 -
OpenCV-Python -- Image Segmentation with Watershed Algorithm
学习目标学习分水岭算法(watershed algorithm).函数:cv2.watershed().理论任何灰度图像可以被看作是地形面(topographic surface),较大的灰度值表示峰和山,较小的灰度值区域表示山谷。我们首先使用不同的颜色(标签)填充孤立的山谷(局部最小值)。当填充水位上升至山峰附近时,来自不同山谷的水开始融合。为了避免融合,需要在合并的地方建立障碍。指导所有的山峰在水之下。那么这些建立的障碍就是分割结果。这就是分水岭的基本思想。由于噪声或者不规则区域的影响,这原创 2021-01-11 21:18:31 · 471 阅读 · 0 评论 -
OpenCV-Python -- Hough Circle Transform
学习目标我们使用霍夫变换寻找图像中的圆。学习函数:cv2.HoughCircles().理论圆的表达式通常为:(x−xcenter)2+(y−ycenter)2=r2(x - x_{center})^2 + (y - y_{center})^2 =r^2(x−xcenter)2+(y−ycenter)2=r2,其中(xcenter,ycenter)(x_{center},y_{center})(xcenter,ycenter)是圆的中心,rrr是圆的半径。从该方程中,我们可以看到3个参数原创 2021-01-04 21:17:45 · 190 阅读 · 0 评论 -
OpenCV-Python -- Hough Line Transform
学习目标理解霍夫变换的概念学习用霍夫变换在图像中检测直线学习函数:cv2.HoughLines(),cv2.HoughLinesP()理论可以参考链接:霍夫变换检测直线的原理深入理解原创 2020-12-28 21:27:11 · 344 阅读 · 3 评论 -
OpenCV-Python -- Template Matching
学习目标使用模板匹配(template matching)在图像中搜索目标学习函数:cv2.matchTemplate(), cv2.minMaxLoc().理论模板匹配:使用模板图像在目标图像中搜索与模板相似的图像区域。OpenCV提供了模板匹配的函数,cv2.matchTemplate() 。将模板图像在输入图像中滑动(类似于2D卷积),在每一个位置比对模板与输入图像的子块。OpenCV中,两个图像块相似性的度量方法有多种。返回值是灰度图像,每个像素表示该像素邻域与模板图像的匹配度。如果输原创 2020-12-25 22:03:09 · 627 阅读 · 2 评论 -
OpenCV-Python -- Fourier Transform
学习目标使用OpenCV计算傅里叶变换使用Numpy中的傅里叶变换(FFT)傅里叶变换的应用学习函数如下:cv2.dft(),cv2.idft()理论傅里叶变换用来分析不同滤波器的频率特性。对于图像而言,2D离散傅里叶变换(DFT)用于寻找频率域。傅里叶变换的快速算法,FFT,常用于计算DFT。对于正弦信号,x(t)=Asin(2πft)x(t) = Asin(2\pi ft)x(t)=Asin(2πft),我们称f为频率信号,如果频率域确定,那么我们可以看到f的具体形状(spike)。如原创 2020-12-23 21:41:26 · 247 阅读 · 0 评论 -
OpenCV-Python -- Histogram - 4 : Histogram Backprojection
学习目标这一节,我们学习直方图反向投影(histogram backprojection)。理论该理论由Michael J. Swain , Dana H. Ballard发表在他们的论文中,Indexing via color histograms.那么,直方图反向投影是什么意思呢?常被用于图像分割或者寻找图像中感兴趣区域。简单来说,首先创建与输入图像相同大小的单通道图像,图像中每一个像素与该像素属于目标的概率有关。简而言之,输出图像中目标区域具有更大的白色区域(相对于背景区域)。这仅仅是直觉上的原创 2020-12-21 21:06:11 · 219 阅读 · 0 评论 -
OpenCV-Python -- Histograms - 3 : 2D Histograms
学习目标这一节,我们将学习寻找和绘制2D直方图,对后面的章节非常有用。简介在直方图系列的第一节,我们计算并绘制了一维直方图。之所以称之为一维,是因为我们仅仅考虑一个特征(图像的灰度值)。但是,在二维直方图中,我们考虑2个特征。通常情况下,在计算彩色直方图的时候,考虑的2个特征为每个像素的色度和饱和度(Hue&Saturation)。2D Histogram in OpenCV使用的函数依然是:cv2.calcHist(). 对于彩色直方图,我们需要将图像进行转换(BGR->HSV),原创 2020-12-10 21:27:57 · 523 阅读 · 0 评论 -
OpenCV-Python -- Histograms-2:Histogram Equalization
学习目标这一节,我们要学习直方图均衡化(histogram equalization),然后提高图像的对比度。理论考虑一张图像的像素值仅分布在特定的范围,比如较亮的图像的像素值通常都较大。但是,一张好的图像应该分布均匀。所以我们需要通过直方图均衡化使得图像分布更加均匀,见下图:可以参考:Histogram Equalization。下面我们使用Numpy计算图像的直方图,实例如下:import cv2import numpy as npfrom matplotlib import pyp原创 2020-12-09 21:38:56 · 474 阅读 · 0 评论 -
OpenCV-Python -- Histograms - 1 : Find, Plot, Analyze !!!
学习目标计算直方图,使用OpenCV和Numpy.画直方图,使用OpenCV和Matplotlib.学习函数: cv2.calcHist(),np.histogram().理论知识直方图是什么?可以将直方图看成是图表,可以直观给出图像的整体像素值的分布情况。通常绘制直方图的X轴是256级(0-255)灰度,Y轴统计该灰度下的像素数量。直方图是理解图像的另外一种方式。通过直方图,可以直观上获得对比度,亮度,强度分布等。当前,几乎所有的图像处理工具提供了直方图特征。下图来自 Cambridge原创 2020-12-08 16:04:09 · 180 阅读 · 2 评论 -
OpenCV-Python -- Contours Hierarchy
学习目标这一部分,我们将学习轮廓的层次结构,比如轮廓中父子关系(parent-child)。理论在轮廓的前几部分内容中,OpenCV提供了多个关于轮廓的函数。在轮廓提取函数中,cv2.findContours() ,我们传递参数 Contour Retrieval Mode(轮廓检索模式)。通常的参数为:cv2.RETR_LIST,cv2.RETR_TREE。但是这些参数是什么意思呢? contours, hierarchy = cv2.findContours(img_bin, cv2.RETR_原创 2020-12-03 20:59:07 · 1483 阅读 · 4 评论 -
OpenCV-Python -- Contours:More Functions
学习目标凸性缺陷(convexity defects)以及如何寻找寻找距离多边形最近的点匹配不同的形状理论和代码1. 凸性缺陷(Convexity Defects)我们之前学习过凸包的相关知识。对象的任何关于凸包(hull)的偏差可以认为是凸性缺陷。OpenCV中,有相应的函数可以得到凸性缺陷,cv2.convexityDefects(),基本的用法如下:hull = cv2.convexHull(cnt,returnPoints = False)defects = cv2.convex原创 2020-12-01 17:00:50 · 247 阅读 · 0 评论 -
OpenCV-Python -- Contour Properties
学习内容概述这一节,我们提取常用的目标特性,比如, Solidity, Equivalent Diameter, Mask image, Mean Intensity等。可以参考链接: Matlab regionprops documentation来了解具体的解释。1. Aspect Ratio目标对象的包围框的宽高比值,公式如下Aspect Ration=widthheightAspect \, Ration = \frac{width}{height}AspectRation=height原创 2020-11-26 17:22:24 · 188 阅读 · 1 评论 -
OpenCV-Python -- Contour Features
学习目标寻找不同的轮廓特征,比如面积,周长,重心,边框与轮廓相关的函数矩(Moments)图像矩可以帮助计算一些特征,比如目标对象的质心,对象的面积等。原创 2020-11-25 20:49:56 · 453 阅读 · 0 评论 -
Contours:Getting Started
学习目标理解什么是轮廓学习寻找轮廓,画轮廓学习函数:cv2.findContours(),cv2.drawContours()轮廓是什么?轮廓(contours):可以简单理解为曲线(curve),包含了沿着边界的所有连续点,具有相同的颜色和强度(intensity)。轮廓常用于形状分析,目标检测和识别。为了更高的精度,使用二值图像。所以在寻找轮廓之前,使用阈值和坎尼检测。cv2.findContours()函数会修改原图像。在OpenCV中,寻找轮廓类似于从黑色的背景中寻找白色的目标原创 2020-11-18 20:58:10 · 188 阅读 · 4 评论 -
OpenCV-Python -- Image Pyramids(图像金子塔)
学习目标学习图像金子塔使用图像金子塔创建新的水果," Orapple"学习函数:cv2.pyrUp(),cv2.pyrDown().理论通常情况下,我们使用图像都是固定的大小。但是,在某些情况下,我们需要使用不同分辨率的图像。比如,当在图像中搜索目标时,比如人脸,但是我们并不确定图像中人脸目标的大小。这种情况下,我们需要创建一系列不同分辨率的图像,然后在其中搜索人脸目标。这些不同分辨率的图像称之为图像金子塔(Image Pyramids),比如下图所示:常用的两种图像金子塔:(1)高斯金子原创 2020-11-12 21:40:47 · 988 阅读 · 0 评论 -
OpenCV-Python -- Canny Edge Detection
学习目标Canny边界检测的概念学习函数:cv2.Canny().理论Canny是广泛使用的边界检测算法,发明于1986 John. Canny。Canny是多阶段算法,也是目前较为优秀的边缘检测算法。下面将逐步了解每个阶段的内容。坎尼算法要达到的基本目标:低错误率。所有的边缘都应被找到,并且没有伪响应,也就是检测的边缘都是真实的。边缘定位准确。已定位的边缘尽可能真实,也就是由检测器标记为边缘的点和真是边缘的中心之间距离应该最小。单一边缘相应。对于真实的边缘点,检测器应该返回一个点,原创 2020-11-10 21:17:24 · 532 阅读 · 0 评论 -
OpenCV-Python -- Image Gradients
学习目标计算图像梯度,寻找边界学习函数:cv2.Sobel(),cv2.Schar(),cv2.Laplacian()等。理论介绍OpenCV提供了3种类型的梯度滤波器或者高通滤波器,比如Sobel,Scharr和Laplacian.Sobel and Scharr Derivativessobel算子是高斯平滑和微分的联合运算,并且可以抑制噪声。我们可以指定差分的方向,垂直或者水平(通常使用参数,yorder, xorder)。并且可以指定核的大小,使用ksize。如果ksize=-1,原创 2020-11-09 21:29:11 · 189 阅读 · 0 评论 -
OpenCV-Python -- Morphological Transformations
学习目标学习不同类型的形态学操作,比如腐蚀(Erosion),膨胀(Dilation),开操作(Opening),闭操作(Closing)等学习不同的函数,比如,cv2.erode(),cv2.dilate(),cv2.morphologyEx()等理论知识形态学变换是一系列基于图像形状的简单操作。通常处理二值图像,输入有2个参数,1.输入图像;2.结构化元素或核,形状决定该操作的性质。两个基本的形态学操作为腐蚀和膨胀。他们的变体,比如开操作,闭操作,梯度等。我们将使用下面的图像一一介绍形态学操原创 2020-11-06 21:26:50 · 277 阅读 · 0 评论 -
OpenCV-Python -- Smoothing Images
学习目标:使用低通滤波器平滑图像使用人工滤波器模糊图像(2D卷积)2D卷积(图像滤波)正如对一维信号的滤波操作一样,我们可以使用不同的滤波器对图像进行滤波,比如低通滤波器(LPF),高通滤波器(HPF)等。低通滤波器可以移除噪声,进而平滑图像。而高通滤波器可以寻找图像的边界。OpenCV提供相应的函数,cv2.filter2D(src, ddepth, kernel, dst=None, anchor=None, delta=None,原创 2020-11-04 21:17:28 · 999 阅读 · 0 评论 -
OpenCV-Python -- Geometric Transformations of Images
学习目标对图像进行几何变换,比如平移,旋转,仿射变换等。学习函数:cv2.getPerspectiveTransform变换(Transformations)OpenCV提供两种变换函数,cv2.warpAffine 和 cv2.warpPerspective,它们可以生成所有种类的变换。cv2.warpAffine的输入是2x3变换矩阵, cv2.warpPerspective的输入为3x3变换矩阵。缩放(Scaling)缩放即是改变图像的大小,函数为cv2.resize()。输出的大小可原创 2020-10-29 20:31:26 · 161 阅读 · 0 评论 -
OpenCV-Python -- Image Thresholding
学习目标本教程,将学习自适应阈值(Adaptive Thresholding),Otsu‘s阈值等学习函数:cv2.threshold,cv2.addaptiveThreshold简单阈值(Simple Thresholding)阈值的方法是非常直接的,如果一个像素大于阈值,分配该像素一个固定值(通常是白色,1或255),否则值为黑色(值为0)。使用函数如下:cv2.threshold(img, thresh, maxval,function_type)img:输入图像,必须是灰度图像。原创 2020-08-04 11:08:13 · 237 阅读 · 0 评论 -
OpenCV-Python -- Changing Colorspaces
学习目标这个教程中,将学习图像的颜色空间转换,比如BGR<-->Gray,BGR <-->HSV等等创建在视频中提取颜色对象的小应用学习函数:cv2.cvtColor(),cv2.inRange().改变颜色空间(Changing Color-Space)OpenCV中有超过150种颜色空间转换方法,但是我们仅仅展示最常使用的几种方法,BGR<-->Gray,BGR <-->HSV.颜色转换函数,cv2.cvtColor(input_image原创 2020-07-30 20:26:47 · 113 阅读 · 0 评论 -
OpenCV-Python -- Performance Measurement and Improvement Techniques
学习目标在图像处理中,不仅要得到正确的结果,同时还有快速的处理完成。因此,这一部分,我们将学习如下:评测代码的效率提升代码效率的技巧学习函数:cv2.getTickCount,cv2.getTickFrequency.除了使用OpenCV,Python中的time模块同样用于分析代码执行时间。另外的profile模块用于生成详细的测试报告,比如每一个函数的执行时间,以及该函数被调用的次数等等。如果使用IPython,所有的测试结果都会以一种友好的方式呈现。OpenCV时间分析(Measuri原创 2020-07-29 20:52:09 · 128 阅读 · 0 评论 -
OpenCV-Python -- Arithmetic Operations on Images
学习目标图像上的算术操作,加法,减法,按位运算等.学习函数:cv2.add(),cv2.addWeighted()图像加法(image addition)opencv的加法操作可以使用cv2.add()或者使用nunpy数组操作,比如res=img1+img2,两张图必须大小和深度一样,或者img2是一个标量。注意,OpenCV和Numpy的加法有一定的差别,OpenCV加法是饱和操作,而Numpy加法是取模运算。图像相加时,OpenCV函数能够呈现更好的效果,所以优先使用cv2.add(原创 2020-07-27 21:41:48 · 150 阅读 · 0 评论 -
OpenCV-Python -- Basic Operations on Images
学习目标:访问像素,以及修改像素获取图像的属性设置图像ROI区域图像通道分离和通道合并访问、修改像素import cv2import numpy as npimg = cv2.imread('messi5.jpg')原创 2020-06-21 11:31:03 · 651 阅读 · 0 评论 -
OpenCV-Python -- Trackbar as the Color Palette
学习目标将 trackbar 与 OpenCV 窗口绑定函数:cv2.getTrackbarPos(), cv2.createTrackbar()代码展示这里创建简单的应用:颜色修改与显示。创建一个颜色显示窗口和三个 trackbar 窗口(每一个trackbar控制 B,G,R的通道)。滑动trackbar,窗口的颜色会发生变化,窗口默认的颜色是黑色。cv2.getTrackbarPos():...原创 2020-05-30 16:39:27 · 217 阅读 · 0 评论 -
OpenCV-Python -- Mouse as a Paint-Brush
学习目标学习处理鼠标事件学习函数:cv2.setMouseCallback()简单的例子创建简单的应用,双击图片的任何位置,画出几何形状-圆。首先创建鼠标回调函数,当点击鼠标时,执行回调函数(callback function)。鼠标事件包括 left-button down, left-button up, left-button double-click 等。对于每一次鼠标事件,会返回相应的坐标(x,y)。有了事件和位置,我们可以做任何事情。获得所有提供的鼠标事件,运行如下代码:impo原创 2020-05-16 17:26:13 · 150 阅读 · 0 评论 -
OpenCV-Python -- Drawing Functions in OpenCV
学习目标用OpenCV画不同的几何形状函数: cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()代码上面的所有函数的基本参数如下:img:待画形状的目标对象;color:形状的颜色。对于BGR,传递元组(255,0,0)蓝色。对于灰度图,传递标量值;thickness:形状的粗细,如果给封闭的形状(比如圆)传递 -1,则会填充形状,默认值为 1;lineType:线的类型,8-connecte原创 2020-05-15 09:42:24 · 273 阅读 · 0 评论 -
OpenCV-Python 教程 -- Getting Started with Videos
学习目标学习读取视频,显示视频和保存视频学习从摄像头获取视频,并显示要学习的函数: cv2.VideoCapture(), cv2.VideoWriter()Capture Video from Camera从摄像头中抓取视频流,OpenCV提供了非常简单的接口。现在学习从内置摄像头获取视频流,并逐帧显示。为了抓取视频,首先需要创建 VideoCapture 对象。参数为设备索引(device index)或者视频文件名。设备索引是指向摄像头的数字编号,通常会连接到一个设备,传递参数 0 或原创 2020-05-08 17:56:59 · 296 阅读 · 0 评论 -
OpenCV-Python 教程 -- Getting Started with Images
Getting Started with Images学习目标:学习图像读取、显示和保存 熟悉三个函数:cv2.imread(),cv2.imshow(),cv2.imwrite() 使用Matplotlib显示图像Using OpenCV原创 2020-04-29 17:33:39 · 194 阅读 · 0 评论