当前位置: 首页 > article >正文

常见计算机视觉算法介绍

常见计算机视觉算法介绍

  • 常见计算机视觉算法介绍
    • 摘要
    • 第1章 计算机视觉概述
      • 1.1 什么是计算机视觉?
    • 第2章 图像处理基础
      • 前题
      • 2.1 图像灰度化
      • 2.2 图像二值化
    • 第3章 图像特征检测
      • 3.1 SIFT(尺度不变特征变换)
      • 3.2 Harris角点检测
    • 第4章 目标识别与分类
      • 4.1 Haar Cascade(基于Haar特征的级联分类器)
      • 4.2 基于深度学习的目标识别(使用YOLO)
    • 第5章 图像分割
      • 5.1 阈值分割
      • 5.2 基于深度学习的图像分割(使用U-Net)
    • 第6章 总结

常见计算机视觉算法介绍

摘要

计算机视觉(Computer Vision)是一门研究如何让计算机“看”并理解图像或视频的科学。随着技术的发展,计算机视觉在多个领域得到了广泛应用,如医学影像分析、安防监控、自动驾驶等。本文将介绍几种常见的计算机视觉算法,并提供Python代码案例。


第1章 计算机视觉概述

1.1 什么是计算机视觉?

计算机视觉的目标是使计算机能够像人类一样从图像或视频中获取信息并进行理解。与人类视觉不同,计算机视觉需要依赖于算法和计算能力来实现这一目标。


第2章 图像处理基础

前题

库安装:
常用库有:cv2,TensorFlow,numpy,matplotlib等。
cv2,numpy,matplotlib的安装较为简单,直接conda或pip安装即可
TensorFlow的安装可以参考我的这篇文章:
【最新最详细TensorFlow安装教程2024】手把手教你安装TensorFlow

2.1 图像灰度化

将彩色图像转换为灰度图是计算机视觉的第一步。Python中可以使用OpenCV库来实现这一操作。

import cv2

# 读取彩色图像
color_image = cv2.imread('input.jpg')

# 转换为灰度图像
gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)

# 显示原图和灰度图
cv2.imshow('Color Image', color_image)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 图像二值化

二值化是将图像中的像素值限制在黑色和白色之间,常用于目标提取。

import cv2
import numpy as np

# 读取灰度图像
gray_image = cv2.imread('gray.jpg', cv2.IMREAD_GRAYSCALE)

# 定义阈值
threshold = 127

# 应用二值化
ret, binary_image = cv2.threshold(gray_image, threshold, 255, cv2.THRESH_BINARY)

# 显示原图和二值图
cv2.imshow('Gray Image', gray_image)
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

第3章 图像特征检测

3.1 SIFT(尺度不变特征变换)

SIFT是一种常用的图像局部特征提取算法,广泛应用于目标识别和图像匹配。

import cv2
from matplotlib import pyplot as plt

# 读取图像
image = cv2.imread('input.jpg')

# 初始化SIFT检测器
sift = cv2.xfeatures2d.SIFT_create()

# 检测关键点
keypoints = sift.detect(image, None)

# 绘制关键点
cv2.drawKeypoints(image, keypoints, image_sift, (0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

plt.imshow(cv2.cvtColor(image_sift, cv2.COLOR_BGR2RGB))
plt.show()

3.2 Harris角点检测

Harris角点检测算法用于在图像中检测具有显著特征的点。

import cv2
import numpy as np

# 读取图像
image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)

# 计算导数
x_derivative = cv2.Sobel(image, cv2.CV_64F, dx=1, dy=0)
y_derivative = cv2.Sobel(image, cv2.CV_64F, dx=0, dy=1)

# 计算A和B矩阵的元素
a = x_derivative ** 2
b = y_derivative ** 2
c = 2 * x_derivative * y_derivative

# 计算Harris响应
harris_response = a + b - c * (0.04)

# 确定角点位置
threshold = 0.1
corner_mask = np.zeros_like(image)
corner_mask[harris_response > threshold] = 255

# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Corner Mask', corner_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

第4章 目标识别与分类

4.1 Haar Cascade(基于Haar特征的级联分类器)

Haar Cascade是一种经典的物体检测算法,常用于人脸检测。

import cv2

# 加载Haar Cascade分类器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 读取图像
image = cv2.imread('input.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 检测人脸
faces = faceCascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5)

# 绘制矩形框
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 显示结果
cv2.imshow('Face Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.2 基于深度学习的目标识别(使用YOLO)

YOLO是一种高效的实时目标检测算法,基于卷积神经网络。

from tensorflow.keras.models import load_model
import cv2
import numpy as np

# 加载预训练模型
model = load_model('yolov3.h5')

# 读取图像并调整大小
image = cv2.imread('input.jpg')
resized_image = cv2.resize(image, (416, 416))

# 预测边界框和置信度
prediction = model.predict(np.array([resized_image]))
boxes = prediction[0]
scores = prediction[1]

# 解释预测结果
threshold = 0.5
for i in range(len(scores)):
    if scores[i] > threshold:
        box = boxes[i]
        y_min = int(box[0])
        x_min = int(box[1])
        y_max = int(box[2])
        x_max = int(box[3])

        cv2.rectangle(image, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)

# 显示结果
cv2.imshow('Object Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

第5章 图像分割

5.1 阈值分割

阈值分割是一种简单有效的图像分割方法,常用于将感兴趣区域与背景分离。

import cv2
import numpy as np

# 读取灰度图像
gray_image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)

# 定义阈值
threshold = 127

# 应用阈值分割
segmented_image = gray_image.copy()
for i in range(segmented_image.shape[0]):
    for j in range(segmented_image.shape[1]):
        if segmented_image[i, j] > threshold:
            segmented_image[i, j] = 255
        else:
            segmented_image[i, j] = 0

# 显示结果
cv2.imshow('Original Image', gray_image)
cv2.imshow('Segmented Image', segmented_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.2 基于深度学习的图像分割(使用U-Net)

例子如下:

from tensorflow.keras.models import load_model
import cv2
import numpy as np

# 加载预训练模型
model = load_model('unet.h5')

# 读取图像并调整大小
image = cv2.imread('input.jpg')
resized_image = cv2.resize(image, (256, 256))
input_image = resized_image.reshape(1, 256, 256, 3)

# 预测分割结果
prediction = model.predict(input_image)
segmented_mask = prediction[0].reshape(256, 256)

# 可视化结果
cv2.imshow('Original Image', resized_image)
cv2.imshow('Segmented Mask', segmented_mask * 255)
cv2.waitKey(0)
cv2.destroyAllWindows()

第6章 总结

通过以上介绍,我们可以看到计算机视觉技术在图像处理和目标检测等方面的应用已经非常广泛。从传统的特征提取方法到基于深度学习的端到端模型,计算机视觉正在不断进步和发展。未来,随着计算能力的提升和算法的优化,计算机视觉将在更多领域发挥重要作用。



http://www.kler.cn/a/530412.html

相关文章:

  • 图像噪声处理技术:让图像更清晰的艺术
  • python小知识-jupyter lab
  • 《AI大模型开发笔记》DeepSeek技术创新点
  • [ESP32:Vscode+PlatformIO]新建工程 常用配置与设置
  • 全覆盖路径规划-精准细胞覆盖算法
  • 学术总结Ai Agent中firecrawl(大模型爬虫平台)的超简单的docker安装方式教程
  • 全面解析机器学习优化算法中的进化策略
  • Baklib如何改变内容管理平台的未来推动创新与效率提升
  • SQLAlchemy ORM在Python Web开发中的核心作用探究
  • c语言:编译和链接(详解)
  • 点击WPS 任务栏上的图标,不是马上进入工作页面,而是呈现多个文档页面选择时的处理方法
  • Ollama+OpenWebUI部署本地大模型
  • LeetCode题练习与总结:有效三角形的个数--611
  • java练习(4)
  • 智慧城市(城市大脑)建设方案
  • 后台管理系统通用页面抽离=>高阶组件+配置文件+hooks
  • 基于YOLO11的遥感影像山体滑坡检测系统
  • 【深度学习】DeepSeek模型介绍与部署
  • Vue 3 30天精进之旅:Day 12 - 异步操作
  • 科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”
  • 如何Docker中搭建swoole环境
  • MySQL数据库环境搭建
  • 初级数据结构:栈和队列
  • 工业相机如何降低CPU占用率
  • FastDFS实用笔记 (Docker 搭建环境 + 整合 SpringBoot)
  • 【大数据技术】教程01:搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell)