前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快乐学AI系列——计算机视觉(1)图像处理基础

快乐学AI系列——计算机视觉(1)图像处理基础

原创
作者头像
MATRIX.矩阵之芯
修改2023-03-29 14:33:46
8060
修改2023-03-29 14:33:46
举报
文章被收录于专栏:快乐学AI系列快乐学AI系列

本系列是由“MATRIX.矩阵之芯”精炼的AI快速入门系列,特色是内容简洁,学习快速。

相关要求:学员需要掌握Python编程基础,另外还需要掌握线性代数、概率论。

第一章:图像处理基础

图像处理是计算机视觉领域的一个基础部分,是对图像进行数字化处理的过程。下面是几个图像处理的基础知识点:

图像的读取和显示

在Python中,可以使用OpenCV库读取和显示图像。

OpenCV是一个开源的计算机视觉库,可以用于图像处理、计算机视觉、机器学习等领域。它提供了许多常用的图像处理功能,例如图像的读写、显示、缩放、旋转、滤波等。同时,它也实现了许多计算机视觉算法,例如目标检测、图像分割、人脸识别等。在Python中,可以使用OpenCV进行图像和视频的处理和分析。

墙内安装速度较慢,需要耐心等待
墙内安装速度较慢,需要耐心等待

以下是一个简单的读取和显示图像的示例代码:

代码语言:javascript
复制
import cv2

# 读取图像,注意!cv2.imread()括号内是图片路径,下面示例图片是和py文件同级。
img = cv2.imread("image.jpg")

# 显示图像
cv2.imshow("Image", img)

# 等待按键按下
cv2.waitKey(0)

# 关闭窗口
cv2.destroyAllWindows()

在上面的代码中,cv2.imread()函数用于读取图像,cv2.imshow()函数用于显示图像,cv2.waitKey()函数用于等待按键按下,cv2.destroyAllWindows()函数用于关闭窗口。

图像的基本操作

在处理图像时,通常需要进行一些基本的操作,如图像的裁剪、缩放、旋转等。以下是一些基本操作的示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg")

# 图像的裁剪
crop_img = img[100:200, 150:250]

# 图像的缩放
scale_img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)

# 图像的旋转
(rows, cols) = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
rotate_img = cv2.warpAffine(img, M, (cols, rows))

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Cropped Image", crop_img)
cv2.imshow("Scaled Image", scale_img)
cv2.imshow("Rotated Image", rotate_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中,img[100:200, 150:250]表示图像的裁剪区域,cv2.resize()函数用于缩放图像,cv2.getRotationMatrix2D()函数用于获取旋转矩阵,cv2.warpAffine()函数用于旋转图像。

图像的色彩空间和通道操作

在处理图像时,有时需要将图像从一种色彩空间转换到另一种色彩空间,或对图像的通道进行操作。以下是一些色彩空间和通道操作的示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg")

# 转换色彩空间
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 提取通道
b, g, r = cv2.split(img)

# 合并通道
merge_img = cv2.merge((b, g, r))

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Gray Image", gray_img)
cv2.imshow("HSV Image", hsv_img)
cv2.imshow("BGR Image", merge_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中,cv2.cvtColor()函数用于转换色彩空间,cv2.split()函数用于提取通道,cv2.merge()函数用于合并通道。

噪声去除和图像增强

当图像受到噪声的影响时,我们通常需要对其进行去噪处理以提高图像的质量。常见的图像去噪方法有均值滤波、中值滤波、高斯滤波等。

图像去噪

  • 均值滤波

均值滤波是一种简单的线性平滑滤波方法,它将像素周围邻域内的像素值取平均值来代替当前像素的值。均值滤波对高斯噪声的去除效果较好,但会对图像的边缘和细节造成模糊。

示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg")

# 均值滤波
blur_img = cv2.blur(img, (5, 5))

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Blur Image", blur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 中值滤波

中值滤波也是一种常见的滤波方法,它将像素周围邻域内的像素值取中值来代替当前像素的值。中值滤波对椒盐噪声的去除效果较好,不会对图像的边缘和细节造成模糊。

示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg")

# 中值滤波
median_img = cv2.medianBlur(img, 5)

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Median Image", median_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 高斯滤波

高斯滤波是一种线性平滑滤波方法,它通过对像素周围邻域内像素值的加权平均来代替当前像素的值。高斯滤波对高斯噪声的去除效果较好,不会对图像的边缘和细节造成明显模糊。

示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg")

# 高斯滤波
gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Gaussian Image", gaussian_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像增强

图像增强是一种通过对图像进行处理,使其在视觉上更容易理解或提高其可用性的方法。常见的图像增强方法有直方图均衡化、拉普拉斯变换、Sobel算子、Canny边缘检测等。

  • 直方图均衡化

直方图均衡化是一种增强图像对比度的方法,它通过对图像像素值的分布进行调整来增强图像的对比度。它可以使图像的整体灰度级分布更加均匀,提高图像的视觉效果。

示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

# 直方图均衡化
equalized_img = cv2.equalizeHist(img)

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Equalized Image", equalized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 拉普拉斯变换

拉普拉斯变换是一种增强图像边缘的方法,它可以使图像的边缘更加清晰、锐利。拉普拉斯变换对图像中的高频信息进行增强,使得图像中的边缘和细节更加明显。

示例代码:

代码语言:javascript
复制
import cv2
import numpy as np

# 读取图像
img = cv2.imread("image.jpg")

# 灰度化
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 拉普拉斯变换
laplacian_img = cv2.Laplacian(gray_img, cv2.CV_64F)

# 转换为uint8类型
laplacian_img = np.uint8(np.absolute(laplacian_img))

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Laplacian Image", laplacian_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • Sobel算子

Sobel算子是一种边缘检测算法,它可以在图像中检测出水平和垂直方向的边缘。Sobel算子对于检测较粗的边缘效果较好,但对于较细的边缘可能会漏检或误检。

示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

# Sobel算子
sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobel_img = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Sobel Image", sobel_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • Canny边缘检测

Canny边缘检测是一种常用的边缘检测算法,它可以检测出图像中的所有边缘,并将其转换为二值图像。

示例代码:

代码语言:javascript
复制
import cv2

# 读取图像
img = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

# Canny边缘检测
canny_img = cv2.Canny(img, 100, 200)

# 显示图像
cv2.imshow("Image", img)
cv2.imshow("Canny Image", canny_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上是图像处理基础的一些内容,这些内容涉及到了图像处理的一些基本操作和算法,对于计算机视觉和图像处理有着重要的意义。在学习计算机视觉之前,需要先掌握这些基本的概念和操作,才能更好地理解计算机视觉中的算法和应用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一章:图像处理基础
    • 图像的读取和显示
      • 图像的基本操作
        • 图像的色彩空间和通道操作
          • 噪声去除和图像增强
            • 图像去噪
          • 图像增强
          相关产品与服务
          人脸识别
          腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档