cookdata计算机视觉笔记整理

cv2.imread()函数读取图像的通道顺序为BGR,主流的图像通道顺序为RGB。

2.1 图像运算

图像对应像素进行加减乘除运算。

cv2.add(img1, img2)
cv2.subtract(img1, img2)
cv2.multiply(img1, img2)
cv2.dicide(img1, img2)

与、或、非、异或运算。

cv2.bitwise_and(img1, img2)
cv2.bitwise_or(img1, img2)
cv2.bitwise_not(img1)
cv2.bitwise_xor(img1, img2)

2.2 色彩空间转换

使用 cvtColor(src, dst, type, channels)函数。常用的颜色空间有BRG、RGB、GRAY、HSV、HLS。

2.3 图像几何变换

平移、缩放、旋转等操作。

rows, cols, _ = img.shape

m = 100; n = 50
M = np.float32([[1, 0, m], [0, 1, n]])
translation = cv2.warpAffine(img, M, (cols, rows))

resize = cv2.resize(img, None, fx=2, fy=1.5)

M = cv2.getRotationMatrix2D(((cols-1)/2.0, (rows-1)/2.0, 90, 1)
rotation = cv2.warpAffine(img, M, (cols, rows))

对于透射变换,需要创建一个3×3的变换矩阵。要找到此变换矩阵,需要输入图像上的四个点的坐标,以及这四个点在输出图像上对应的坐标。在这四个点中,其中三个不应该共线。
可通过cv2.getPerspectiveTransform()找到变换矩阵,再使用cv2.warpPerspective()应用此3×3变换矩阵。


pts1 =

pts2 =

M = cv2.getPerspectiveTransform(pts1, pts2)

dst = cv2.warpPerspective(img, M, (width, heigh))

2.4 图像平滑

定义:取周围像素点的均值作为该点新的像素值。


blur = cv2.blur(img, ksize=(5, 5))

定义:与均值平滑的不同之处在于,不同位置的像素被赋予了不同的权重,权重呈现高斯分布。

GaussianBlur = cv2.GaussianBlur(img, ksize=(25, 25), sigmaX = 9)

定义:取中位数作为该点新的像素值。

medianblur = cv2.medianBlur(img, ksize = 11)

高斯滤波是以距离为权重,只考虑了像素间的空间上的关系,因此滤波的结果会丢失边缘的信息。
定义:在此基础上,双边滤波考虑了像素值大小的关系,来确定权重值,可保留边缘。

  • 空间距离
  • 灰度距离
bilateralFilter = cv2.bilateralFilter(img, d=9, sigmaColor=100, sigmaSpace=100)

2.5 形态学处理

形态学是图像处理中应用最为广泛的技术之一,只要用于从图像中提取有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通区域等。

取区域中像素值的最大值,代替中心点位置的像素值。
当二值化图像与卷积核做卷积,只要有一个点的像素值为1,则中心点像素值变为1;如果所有像素值都为0,则保留原来的像素值。


kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,5))
dilate = cv2.dilate(img, kernel, iterations=1)

当二值化图像与卷积核做卷积,只要有一个点的像素值为0,则中心点像素值变为0;如果所有像素值都为1,则保留原来的像素值。
可去除灰度值较大的噪点。

kernel = np.ones((3,3), np.uint8)

erosion = cv2.erode(img, kernel, iterations=1)

先腐蚀后膨胀。
作用:

  • 去除噪声
  • 在纤细点处分离物体
  • 平滑较大物体的边界,同时并不明显改变其面积
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10,10))
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

先膨胀后腐蚀。
作用:

  • 关闭前景物体内部的小孔
  • 平滑对象的轮廓
  • 将狭窄的缺口连接成细长的弯口
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10,10))
opening = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

2.6 边缘检测

目的:标识数字图像中亮度变化明显的点。
Canny边缘检测的主要步骤:

  • 去除噪声,通常使用高斯平滑
  • 计算图像的梯度
  • 过滤非边缘像素:使用非极大值抑制技术,将模糊的边界变得清晰
  • 双阈值筛选:设置高低阈值,区分强弱边缘
gaussianblur = cv2.GaussianBlur(img, (3,3),0)
canny = cv2.Canny(gaussianblur, 50, 150)

2.7 直方图处理

灰度直方图是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像中每种灰度出现的频率。其横坐标是灰度级;纵坐标是出现的个数(概率)。
在使用轮廓线确定物体边界时,可通过直方图更好地选择边界阈值,进行阈值化处理;对物体与背景有较强对比的景物的分割有帮助。


plt.hist(img,ravel(), 256, [0,256])
plt.show()

把原图像变换为在整个灰度范围内均匀分布的形式,用于提高图像的质量
步骤:

  • 统计图像中每个灰度级出现的次数,计算图像中每个灰度级出现的概率
  • 根据变换公式得到直方图均衡化的变换函数(严格的单调递增函数)
  • 根据变换函数映射到每个像素点
  • 输出映射后的图像

img_yuv = cv2.cvtColor(img,  cv2.COLOR_BGR2YUV)

img_yuv[:, :, 0] = cv2.equalizeHist(img_yuv[:, :, 0])

img_output = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2RGB)

plt.imshow(img_output)
plt.show()

Original: https://blog.csdn.net/Bruce_lj/article/details/123467493
Author: Bruce_lj
Title: cookdata计算机视觉笔记整理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644646/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球