OpenCV Python编程
文章平均质量分 82
OpenCV Python编程
SongYuLong的博客
学无止境
展开
-
OpenCV-Python中的图像处理-视频分析
初始窗口是蓝色的“C1”,它的圆心为蓝色方框“C1_o”,而窗口中所有点质心却是“C1_r”(小的蓝色圆圈),很明显圆心和点的质心没有重合。这时又可以找到新窗口内所有点的质心,大多数情况下还是不重合的,所以重复上面的操作:将新窗口的中心移动到新的质心。就这样不停的迭代操作直到窗口的中心和其所包含点的质心重合为止(或者有一点小误差)。按照这样的操作我们的窗口最终会落在像素值(和)最大的地方。图反向投影得到的点),和一个小的圆形窗口,我们要完成的任务就是将这个窗。口移动到最大灰度密度处(或者是点最多的地方)。原创 2023-08-15 12:30:06 · 1434 阅读 · 1 评论 -
OpenCV-Python中的图像处理-图像特征
SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。cv2.drawKeypoints(img, kp, out_img, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS):画特征点。Harris 角点用红色像素标出,绿色像素是修正后的角点。原创 2023-08-14 19:32:44 · 1060 阅读 · 0 评论 -
OpenCV-Python中的图像处理-GrabCut算法交互式前景提取
【代码】Python-OpenCV中的图像处理-GrabCut算法交互式前景提取。原创 2023-08-14 14:50:25 · 1425 阅读 · 0 评论 -
Python-OpenCV中的图像处理-分水岭算法
【代码】Python-OpenCV中的图像处理-分水岭算法。原创 2023-08-14 11:38:10 · 118 阅读 · 0 评论 -
OpenCV-Python中的图像处理-霍夫变换
【代码】Python-OpenCV中的图像处理-霍夫变换。原创 2023-08-12 18:46:51 · 2318 阅读 · 0 评论 -
OpenCV-Python中的图像处理-模板匹配
在前面的部分,我们在图片中搜素梅西的脸,而且梅西只在图片中出现了一次。假如你的目标对象只在图像中出现了很多次怎么办呢?函数cv.minMaxLoc() 只会给出最大值和最小值。此时,我们就要使用阈值了。在下面的例子中我们要经典游戏 Mario 的一张截屏图片中找到其中的硬币。实测验证 cv2.TM_CCORR 的效果不是太好。注意:阀值设定要合适,threshold = 0.8。threshold = 0.95部分金币没有匹配到。程序原图文件,在一张大图中搜索梅西的面部。原创 2023-08-12 16:46:54 · 1117 阅读 · 0 评论 -
OpenCV-Python中的图像处理-傅里叶变换
函数 np.fft.fft2() 可以对信号进行频率转换,输出结果是一个复杂的数组。如果输出结果比输入图像大,输入图像就需要在进行 FFT 前补0。现在我们得到了结果,频率为 0 的部分(直流分量)在输出图像的左上角。如果想让它(直流分量)在输出图像的中心,我们还需要将结果沿两个方向平移 N/2。首先我们需要构建一个掩模,与低频区域对应的地方设置为 1, 与高频区域对应的地方设置为 0。第一个通道是结果的实数部分,第二个通道是结果的虚数部分。我们可以看到输出结果的中心部分更白(亮),这说明低频分量更多。原创 2023-08-12 12:00:54 · 2431 阅读 · 0 评论 -
OpenCV-Python中的图像处理-图像直方图
所 以 对 于 一 维 直 方 图, 我 们 最 好 使 用 这 个函 >数。使 用 np.bincount 时 别 忘 了 设 置 minlength=256。#别忘了中括号 [img],[0],None,[256],[0,256],只有 mask 没有中括号。Numpy 还 有 一 个 函 数 np.bincount(), 它 的 运 行 速 度 是。hist 是一个 256x1 的数组,每一个值代表了与次灰度值对应的像素点数目。#img.ravel() 将图像转成一维数组,这里没有中括号。原创 2023-08-11 12:05:42 · 1664 阅读 · 0 评论 -
OpenCV-Python中的图像处理-图像轮廓
轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。你应该记住,要找的物体应该是白色而背景应该是黑色。原创 2023-08-09 18:05:31 · 2102 阅读 · 0 评论 -
OpenCV-Python中的图像处理-图像金字塔
高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的。顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值。这样操作一次一个 MxN 的图像就变成了一个 M/2xN/2 的图像。这被称为 Octave。连续进行这样的操作我们就会得到一个分辨率不断下降的图像金字塔。例如,已知L0=G0-cv2.pyrUp(G1),将表达式右侧的cv2.pyrUp(G1)移到左侧,就得到了表达式G0 = L0 + cv2.pyrUp(G1)。如之前介绍的,拉普拉斯金字塔的目的就是为了恢复高分辨率的图像。原创 2023-08-09 15:58:40 · 1179 阅读 · 0 评论 -
OpenCV-Python中的图像处理-边缘检测
第一个参数是输入图像。第三个参数设置用来计算图像梯度的 Sobel卷积核的大小,默认值为 3。最后一个参数是 L2gradient,它可以用来设定求梯度大小的方程。如果设为 True,就会使用我们上面提到过的方程,否则使用方程: Edge−Gradient (G) = jG2 xj + jG2 yj 代替,默认值为 False。它是一个有很多步构成的算法:噪声去除、计算图像梯度、非极大值抑制、滞后阀值等。Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在。原创 2023-08-09 15:18:58 · 2668 阅读 · 0 评论 -
OpenCV-Python中的图像处理-图像梯度
你可以设定求导的方向( xorder 或 yorder)。还可以设定使用的卷积核的大小( ksize)。如果 ksize=-1,会使用 3x3 的 Scharr 滤波器,它的的效果要比 3x3 的 Sobel 滤波器好(而且速度相同,所以在使用 3x3 滤波器时应该尽量使用 Scharr 滤波器)。拉普拉斯算子可以使用二阶导数的形式定义,可假设其离散实现类似于二阶 Sobel 导数,事实上, OpenCV 在计算拉普拉斯算子时直接调用 Sobel 算子。原创 2023-08-09 14:30:54 · 1093 阅读 · 0 评论 -
OpenCV-Python中的图像处理-物体跟踪
现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。• 获取蓝色物体,当然我们还可以做其他任何我们想做的事,比如:在蓝色。• 设置 HSV 阈值到蓝色范围。• 将图像转换到 HSV 空间。• 从视频中获取每一帧图像。原创 2023-08-09 11:46:51 · 1981 阅读 · 0 评论 -
OpenCV-Python中的图像处理-图像平滑
现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据距离中心元素的距离递减,构成一个高斯小山包。这种高斯滤波器只考虑像素之间的空间关系,而不会考虑像素值之间的关系(像素的相似度)。空间高斯函数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算。前面的滤波器都是用计算得到的一个新值来取代中心像素的值,而中值滤波是用中心像素周围(也可以使他本身)的值来取代他。原创 2023-08-09 11:43:56 · 1945 阅读 · 0 评论 -
OpenCV-Python中的图像处理-图像阀值
在使用全局阈值时,我们就是随便给了一个数来做阈值,那我们怎么知道我们选取的这个数的好坏呢?答案就是不停的尝试。但像素值高于阈值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。在前面的部分我们使用是全局阈值,整幅图像采用同一个数作为阈值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。原创 2023-08-09 11:42:47 · 1333 阅读 · 0 评论 -
OpenCV-Python中的图像处理-几何变换
要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图像上对应的位置。在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建这个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后cv2.getAffineTransform 会创建一个 2x3 的矩阵,最后这个矩阵会被传给函数 cv2.warpAffine。OpenCV提供了使用函数cv2.warpAffine()实现图像平移效果,该函数的语法为。对图像进行各种几个变换,例如移动,旋转,仿射变换等。原创 2023-08-09 11:40:41 · 1788 阅读 · 0 评论 -
OpenCV-Python中的图像处理-颜色空间转换
注意:在 OpenCV 的 HSV 格式中, H(色彩/色度)的取值范围是 [0, 179],S(饱和度)的取值范围 [0, 255], V(亮度)的取值范围 [0, 255]。但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软件的 HSV 值进行对比时,一定要记得归一化。在 OpenCV 中有超过 150 中进行颜色空间转换的方法。发现我们经常用到的也就两种: BGR。原创 2023-08-08 20:02:39 · 786 阅读 · 0 评论 -
OpenCV-Python中的图像基础操作
机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。有时需要对 BGR 三个通道分别进行操作。img.shape: 图像的形状(包括行数,列数,通道数的元组)有时需要把独立通道的图片合并成一个 BGR 图像。img.size : 图像的像素数目。img.dtype :图像的数据类型。原创 2023-08-07 15:35:52 · 1926 阅读 · 0 评论 -
OpenCV-Python基础篇(图像的读写显示、图形绘制、显示窗口、程序性能检测及优化等操作)
COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。matplotlib显示彩色图片。matplotlib显示灰度图片。原创 2023-07-29 18:18:47 · 482 阅读 · 0 评论