OpenCV 学习资料——第二章:OpenCV基础知识

第二章:OpenCV基础知识


2.1 OpenCV中的数据结构和基本概念

2.1.1 Mat对象与图像表示

在OpenCV中,cv::Mat是最重要的数据结构,用于表示图像和多维数组。

Mat的基本结构:

  • 数据部分:存储像素数据。
  • 元信息:包含图像的行数、列数、通道数、数据类型等。

创建Mat对象的常用方法:

  1. 从文件读取图像:
     

    cpp

    cv::Mat img = cv::imread("image.jpg", cv::IMREAD_COLOR);
    

  2. 创建空白图像:
     

    cpp

    cv::Mat blank = cv::Mat::zeros(500, 500, CV_8UC3);
    

  3. 转换数据类型:
     

    cpp

    cv::Mat converted;
    img.convertTo(converted, CV_32F);
    

Mat对象的常用方法:

  • rows:行数
  • cols:列数
  • channels():通道数
  • type():数据类型

Python示例:

 

python

import cv2
import numpy as np

# 创建一个500x500的黑色图像
img = np.zeros((500, 500, 3), dtype=np.uint8)

# 打印图像信息
print(f"Rows: {img.shape[0]}, Cols: {img.shape[1]}, Channels: {img.shape[2]}")

2.1.2 图像的基本操作

  1. 读取图像

    • 读取彩色图像:cv2.IMREAD_COLOR
    • 读取灰度图像:cv2.IMREAD_GRAYSCALE
    • 读取原始图像:cv2.IMREAD_UNCHANGED
     

    python

    img = cv2.imread("image.jpg", cv2.IMREAD_COLOR)
    

  2. 显示图像

     

    python

    cv2.imshow("Display window", img)
    cv2.waitKey(0)  # 按任意键关闭窗口
    cv2.destroyAllWindows()
    

  3. 保存图像

     

    python

    cv2.imwrite("output.jpg", img)
    

  4. 访问像素值

     

    python

    # 访问特定像素
    pixel = img[100, 100]
    print(f"Pixel value: {pixel}")
    
    # 修改像素值
    img[100, 100] = [255, 0, 0]  # 将像素设置为蓝色
    


2.2 OpenCV中的基本绘图函数

OpenCV提供了一组绘图函数,可以直接在图像上绘制线条、形状和文本。

2.2.1 画线

 

python

cv2.line(img, (50, 50), (450, 50), (0, 255, 0), thickness=2)

2.2.2 画矩形

 

python

cv2.rectangle(img, (100, 100), (400, 300), (255, 0, 0), thickness=3)

2.2.3 画圆

 

python

cv2.circle(img, (250, 250), 50, (0, 0, 255), thickness=-1)  # 填充圆

2.2.4 添加文字

 

python

cv2.putText(img, "Hello, OpenCV!", (50, 400), cv2.FONT_HERSHEY_SIMPLEX, 
            fontScale=1, color=(255, 255, 255), thickness=2)

2.3 图像的颜色空间

2.3.1 常见颜色空间

  1. BGR:OpenCV默认的颜色空间。
  2. Gray:灰度图像。
  3. HSV:色调(Hue)、饱和度(Saturation)、亮度(Value)。
  4. Lab:亮度(L)、色差(a、b)。

2.3.2 颜色空间转换

 

python

# BGR转灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# BGR转HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

2.4 图像处理基础

图像处理是OpenCV的核心功能之一,以下介绍一些常用的图像处理操作。

2.4.1 图像平滑与模糊

图像平滑用于减少噪声,使图像更加柔和。常见的平滑方法包括均值滤波、高斯滤波和中值滤波。

1. 均值滤波

通过邻域内像素的平均值替换中心像素值。

 

python

blurred = cv2.blur(img, (5, 5))  # 5x5的卷积核
2. 高斯滤波

使用高斯核对图像进行卷积,平滑效果更自然。

 

python

gaussian = cv2.GaussianBlur(img, (5, 5), sigmaX=0)
3. 中值滤波

使用邻域内像素的中值代替中心像素值,特别适合去除椒盐噪声。

 

python

median = cv2.medianBlur(img, 5)  # 核大小为5

2.4.2 边缘检测

边缘检测用于识别图像中显著的变化区域。

1. Sobel算子

计算图像的一阶或二阶导数,用于检测水平和垂直方向的边缘。

 

python

sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)  # x方向
sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)  # y方向
2. Canny边缘检测

通过计算梯度并应用双阈值筛选来提取图像边缘。

 

python

edges = cv2.Canny(img, threshold1=100, threshold2=200)

2.4.3 形态学操作

形态学操作是基于图像结构元素进行的图像处理技术,常用于去噪、填充小孔等。

1. 腐蚀(Erosion)

通过最小值滤波器缩小白色区域。

 

python

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
eroded = cv2.erode(img, kernel, iterations=1)
2. 膨胀(Dilation)

通过最大值滤波器扩大白色区域。

 

python

dilated = cv2.dilate(img, kernel, iterations=1)
3. 开运算与闭运算
  • 开运算:先腐蚀后膨胀,用于去除小噪点。
  • 闭运算:先膨胀后腐蚀,用于填补小孔。
 

python

opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知智志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值