OpenCV图像处理
文章平均质量分 82
基本是翻译官方文档,个人学习系列
追逐梦想的阿光
这个作者很懒,什么都没留下…
展开
-
14. 图像均值化
学习直方图均衡化的概念并使用它来改善我们图像的对比度。考虑像素值仅限于某些特定值范围的图像。例如,更亮的图像会将所有像素限制为高值。但是一个好的图像将包含来自图像所有区域的像素。因此,您需要将此直方图拉伸到两端(如下图所示,来自维基百科),这就是直方图均衡的作用(简单来说)。这通常会提高图像的对比度。阅读有关直方图均衡化Histogram Equalization的维基百科页面以获取更多详细信息。它有一个很好的解释,并附有示例,因此您在阅读之后几乎可以理解所有内容。这里我们将看到OpenCV 功能。1翻译 2021-08-09 10:09:43 · 1795 阅读 · 0 评论 -
13. 图像中的直方图
概述:您可以将直方图视为图形或绘图,它可以让您全面了解图像的强度分布。它是一个图,其中 X 轴上的像素值(范围从 0 到 255,不总是)和 Y 轴上图像中相应的像素数。这只是理解图像的另一种方式。通过查看图像的直方图,可以直观地了解该图像的对比度、亮度、强度分布等。今天几乎所有的图像处理工具都提供直方图功能。您可以看到图像及其直方图。 (请记住,此直方图是为灰度图像绘制的(单通道),而不是为彩色图像绘制的)。直方图的左侧区域显示图像中较暗像素的数量,右侧区域显示较亮像素的数量。从直方图中,您可以看到翻译 2021-08-09 09:19:52 · 485 阅读 · 0 评论 -
11. 霍夫线检测
原理霍夫变换是一种流行的检测任何形状的技术,前提是您可以用数学形式表示该形状。即使它被破坏或扭曲一点,它也可以检测到形状。我们将看到它对一条线是如何工作的。一条直线可以表示为 y=mx+c 或以参数形式表示,如 ρ=xcosθ+ysinθ 其中 ρ 是原点到直线的垂直距离,θ 是这条垂直线与水平轴形成的夹角以逆时针方向测量(该方向因您表示坐标系的方式而异。OpenCV 中使用此表示)。参考下面的图像:所以如果线在原点以下通过,它会有一个正的 rho 并且角度小于 180。如果它在原点之上,而不是取大翻译 2021-08-05 17:34:28 · 756 阅读 · 0 评论 -
10. 傅里叶变换
傅里叶变换用于分析各种滤波器的频率特性。对于图像,使用 2D 离散傅立叶变换 (DFT) 来查找频域。一种称为快速傅立叶变换 (FFT) 的快速算法用于计算 DFT。有关这些的详细信息可以在任何图像处理或信号处理教科书中找到。参考傅里叶变换1. Numpy 中的傅立叶变换首先,我们将看到如何使用 Numpy 找到傅立叶变换。 Numpy 有一个 FFT 包来做到这一点。 np.fft.fft2() 为我们提供了一个复杂数组的频率变换。它的第一个参数是输入图像,它是灰度的。第二个参数是可选的,它决定了输出翻译 2021-08-05 14:27:40 · 335 阅读 · 0 评论 -
9.2 图像拟合轮廓
import cv2 as cvimport matplotlib.pyplot as pltimport numpy as npimg = cv.imread("../../file/photos/irre.png", )# 转换成灰度图像gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 将图像二值化ret, th = cv.threshold(gray, 127, 255, 0)contours, hierarchy = cv.findConto翻译 2021-08-03 20:33:03 · 644 阅读 · 0 评论 -
9.1 轮廓特征
# Image Moments可帮助您计算一些特征,例如对象的质心、对象的面积等。参考 Image Moments上的维基百科页面函数 cv.moments() 给出了所有计算出的矩值的字典。如下:import numpy as npimport cv2 as cvimg = cv.imread('star.jpg',0)ret,thresh = cv.threshold(img,127,255,0)contours,hierarchy = cv.findContours(thresh, 1,翻译 2021-08-03 20:07:32 · 204 阅读 · 0 评论 -
9. 图像轮廓
1.了解什么是轮廓。学习寻找轮廓,绘制轮廓等了解这些函数:cv.findContours(), cv.drawContours()轮廓可以简单地解释为连接所有连续点(沿边界)的曲线,具有相同的颜色或强度。轮廓是形状分析和对象检测和识别的有用工具。为了获得更好的准确性,请使用二进制图像。所以在找到轮廓之前,应用阈值或精明的边缘检测。从 OpenCV 3.2 开始, findContours() 不再修改源图像。在 OpenCV 中,寻找轮廓就像从黑色背景中寻找白色物体。所以请记住,要找到的对象应该翻译 2021-08-03 10:15:43 · 151 阅读 · 0 评论 -
8. 图像金字塔
# 为 A 生成高斯金字塔G = A.copy()gpA = [G]for i in range(6): G = cv.pyrDown(G) gpA.append(G)# 为 B 生成高斯金字塔G = B.copy()gpB = [G]for i in range(6): G = cv.pyrDown(G) gpB.append(G)# 为 A 生成拉普拉斯金字塔lpA = [gpA[5]]for i in range(5, 0, -1): G翻译 2021-08-02 10:29:22 · 213 阅读 · 0 评论 -
7. Canny边缘检测
1. 原理边缘检测是一种流行的边缘检测算法。它是由 John F. Canny 开发的.这是一个多阶段算法,我们将经历多个阶段。降噪:由于边缘检测容易受到图像中噪声的影响,第一步是使用 5x5 高斯滤波器去除图像中的噪声。我们已经在前面的章节中看到了这一点。寻找图像的强度梯度:平滑的图像然后在水平和垂直方向使用 Sobel 核进行滤波,以获得水平方向 (Gx) 和垂直方向 (Gy) 的一阶导数。从这两张图像中,我们可以找到每个像素的边缘梯度和方向,如下所示:EdgeGradient(G)=Gx2翻译 2021-08-02 09:24:24 · 331 阅读 · 0 评论 -
6.图像梯度
查找图像渐变、边缘等使用到以下方法 : cv.Sobel(), cv.Scharr(), cv.Laplacian()…原理OpenCV 提供了三种类型的梯度滤波器或高通滤波器,Sobel、Scharr 和 Laplacian。1. Sobel 和 Scharr 导数Sobel算子是联合高斯平滑加微分运算,所以更抗噪。您可以指定要采用的导数的方向,垂直或水平(分别通过参数 yorder 和 xorder)。您还可以通过参数 ksize 指定内核的大小。如果 ksize = -1,则使用 3x3 S翻译 2021-07-30 09:57:23 · 81 阅读 · 0 评论 -
5. 形态变换
1. 侵蚀侵蚀的基本思想就像土壤侵蚀一样,它侵蚀了前景物体的边界(始终尽量保持前景为白色)。那么它有什么作用呢?内核在图像中滑动(如在 2D 卷积中)。仅当内核下的所有像素都为 1 时,原始图像中的像素(1 或 0)才会被视为 1,否则它会被侵蚀(使其为零)。所以发生的事情是,根据内核的大小,边界附近的所有像素都将被丢弃。因此,前景对象的厚度或大小会减少,或者只是图像中的白色区域会减少。它对于去除小的白噪声、分离两个连接的对象等很有用。import cv2 as cvimport numpy as n翻译 2021-07-28 20:01:26 · 182 阅读 · 0 评论 -
4. OpenCV图像阈值操作
1. 普通阈值操作python中用法对所有矩阵元素应用固定级别阈值retval, dst = cv.threshold( src, thresh, maxval, type[, dst] )参数列表参数类型功能src输入图像矩阵(多通道、8 位或 32 位浮点)thresh阈值maxval在各种阈值类型中应用的最大值type阈值类型dst返回图像矩阵ThresholdTypes(阈值类型)如下实例img = cv.im翻译 2021-07-28 09:11:16 · 259 阅读 · 0 评论 -
3. opencv几何变换
1. 平移变换rows, cols = img.shape[:2]M = np.float32([[1, 0, 100], [0, 1, 50]])res = cv.warpAffine(img, M, (cols, rows))cv.warpAffine(图片源, 变换矩阵, 变换后图片大小)。平移是对象位置的移动。如果你知道在(x,y)方向的转变,使其为(tx,ty),可以创建转换矩阵 M=[10tx01ty](1)M=\begin{bmatrix}1&0&tx\翻译 2021-07-27 11:16:14 · 190 阅读 · 0 评论 -
2. 改变颜色空间及颜色检测
1.导入相应的包import cv2 as cvimport numpy as np2.使用摄像头实时识别cap = cv.VideoCapture(0)#填入0表示使用第一个摄像头,也可以填入本地视频的地址3.使用循环对视频逐帧识别while 1: _, frame = cap.read() # ret接收是否被正确读取,被正确读取为true,否则为false,此处用_代替 # if not ret: # print("fail to read翻译 2021-07-26 15:12:04 · 151 阅读 · 0 评论 -
1. opencv图片基础操作
1.导入相关的包import cv2 as cv import numpy as npimport matplotlib.pyplot as plt#画出效果图2.读入图片img = cv.imread(BASIC_PATH+"/test.jpg")#imread(路径,读取类型)类型有IMREAD_GRAYSCALE(灰度),IMREAD_COLOR(彩色)#默认是按原图像读入<!--读入的图片是一个三维列表格式img[B[], G[], R[]]-->3.显示图片窗口翻译 2021-07-22 23:06:32 · 501 阅读 · 0 评论