1. 图像处理

定义: 图像处理是对图像进行数学运算和转换的过程,以增强图像质量或提取有用信息。

常见操作:
  1. 滤波(Filtering)

    • 作用:用于平滑图像、去噪声或提取边缘信息。
    • 分类:
      • 低通滤波(LPF): 模糊图像,去除高频噪声(如高斯滤波)。
      • 高通滤波(HPF): 强调图像边缘和细节(如拉普拉斯滤波)。
    • 示例:
      import cv2
      import numpy as np
      
      image = cv2.imread("example.jpg", cv2.IMREAD_GRAYSCALE)
      kernel = np.ones((5, 5), np.float32) / 25  # 均值滤波核
      filtered_image = cv2.filter2D(image, -1, kernel)
      
      cv2.imshow("Filtered Image", filtered_image)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
      
  2. 边缘检测(Edge Detection)

    • 作用:找到图像中亮度变化剧烈的区域,用于识别物体边界。
    • 常用算法:
      • Canny 边缘检测
      • Sobel 算子
    • 示例:
      edges = cv2.Canny(image, 100, 200)
      cv2.imshow("Edges", edges)
      cv2.waitKey(0)
      
  3. 变换(Transformation)

    • 作用:对图像进行几何变化(如旋转、缩放)或频域变换(如傅里叶变换)。
    • 示例(傅里叶变换):
      dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
      dft_shift = np.fft.fftshift(dft)
      magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))
      cv2.imshow("Magnitude Spectrum", magnitude_spectrum)
      cv2.waitKey(0)
      

2. 特征提取

定义: 从图像中提取关键点和描述符,以便描述图像的内容或结构。

常见算法:
  1. SIFT (Scale-Invariant Feature Transform)

    • 特点:检测图像中的关键点并生成不变的特征向量,适合图像匹配和物体识别。
    • 示例:
      sift = cv2.SIFT_create()
      keypoints, descriptors = sift.detectAndCompute(image, None)
      img_with_keypoints = cv2.drawKeypoints(image, keypoints, None)
      cv2.imshow("SIFT Keypoints", img_with_keypoints)
      cv2.waitKey(0)
      
  2. SURF (Speeded-Up Robust Features)

    • 特点:比 SIFT 更快,但对图像的旋转和缩放仍具有鲁棒性。
    • 示例:
      surf = cv2.xfeatures2d.SURF_create(400)
      keypoints, descriptors = surf.detectAndCompute(image, None)
      img_with_keypoints = cv2.drawKeypoints(image, keypoints, None)
      cv2.imshow("SURF Keypoints", img_with_keypoints)
      cv2.waitKey(0)
      
  3. ORB (Oriented FAST and Rotated BRIEF)

    • 特点:一种快速、高效的特征点检测和描述算法。
    • 示例:
      orb = cv2.ORB_create()
      keypoints, descriptors = orb.detectAndCompute(image, None)
      img_with_keypoints = cv2.drawKeypoints(image, keypoints, None)
      cv2.imshow("ORB Keypoints", img_with_keypoints)
      cv2.waitKey(0)
      

3. 目标检测

定义: 在图像中找到目标物体的位置并标注。

常见方法:
  1. Haar 分类器

    • 特点:基于 Haar 特征和级联分类器,用于快速检测目标(如人脸检测)。
    • 示例:
      face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
      faces = face_cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5)
      for (x, y, w, h) in faces:
          cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
      cv2.imshow("Detected Faces", image)
      cv2.waitKey(0)
      
  2. 基于 DNN 的目标检测

    • 特点:使用深度学习模型(如 YOLO、SSD)进行精确目标检测。
    • 示例(YOLOv3):
      net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
      layer_names = net.getLayerNames()
      output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
      blob = cv2.dnn.blobFromImage(image, 1/255, (416, 416), swapRB=True, crop=False)
      net.setInput(blob)
      detections = net.forward(output_layers)
      

4. 视频处理

定义: 对视频进行读取、写入和逐帧处理的过程。

常见操作:
  1. 视频读取

    • 示例:
      cap = cv2.VideoCapture("video.mp4")
      while cap.isOpened():
          ret, frame = cap.read()
          if not ret:
              break
          cv2.imshow("Frame", frame)
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      cap.release()
      cv2.destroyAllWindows()
      
  2. 视频写入

    • 示例:
      out = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*'XVID'), 20.0, (640, 480))
      while cap.isOpened():
          ret, frame = cap.read()
          if not ret:
              break
          out.write(frame)
          cv2.imshow("Frame", frame)
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      cap.release()
      out.release()
      cv2.destroyAllWindows()
      
  3. 逐帧处理

    • 例如,对视频中的每一帧进行边缘检测:
      while cap.isOpened():
          ret, frame = cap.read()
          if not ret:
              break
          edges = cv2.Canny(frame, 100, 200)
          cv2.imshow("Edges", edges)
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      cap.release()
      cv2.destroyAllWindows()
      

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐