OpenCV库的一些实用代码示例

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频分析功能。除了你提到的灰度转换、图像反转、高斯滤波和图像保存等基本操作外,OpenCV还包含许多其他功能,以下是一些常见的功能:

  1. 图像处理

    • 色彩空间转换:如从RGB到HSV、Lab等。
    • 直方图均衡化:用于图像增强。
    • 边缘检测:如Canny边缘检测、Sobel边缘检测等。
    • 阈值处理:用于图像二值化。
    • 形态学操作:如膨胀、腐蚀、开运算、闭运算等。
  2. 特征检测与描述

    • 特征点检测:如SIFT、SURF、ORB等。
    • 特征匹配:如BFMatcher、FLANN等。
    • 描述子提取:如提取关键点的描述子。
  3. 对象检测与识别

    • 人脸检测:使用Haar特征或深度学习模型。
    • 物体检测:如使用HOG+SVM、SSD、YOLO等算法。
    • 特征识别:如使用模板匹配技术。
  4. 视频分析

    • 视频读取与写入:处理视频文件。
    • 光流:用于跟踪视频中的移动对象。
    • 背景减除:用于运动检测。
  5. 相机校正与3D重建

    • 相机校正:用于获取相机的内参和外参。
    • 立体视觉:用于3D重建和深度估计。
  6. 图像分割

    • 水平集方法:用于图像分割。
    • 图割算法:用于图像分割。
  7. 机器学习与深度学习

    • 支持向量机(SVM):用于分类任务。
    • 神经网络:可以构建和训练深度学习模型。
  8. 图像变换

    • 仿射变换:如旋转、缩放、平移等。
    • 透视变换:用于图像校正。
  9. 滤镜效果

    • 模糊效果:如平均模糊、中值模糊、双边滤波等。
    • 锐化:增强图像的边缘。
  10. 图形绘制

    • 绘制线条、矩形、圆、椭圆、多边形等。
    • 添加文本。

这些只是OpenCV库中的一部分功能,实际上它提供了更多高级和复杂的图像处理和计算机视觉功能。随着OpenCV的不断更新,新的功能和算法也在不断被添加。

06f0d373703f4fc681cab00a64c57c3b.jpeg

接下来将以该图片为例,展示OpenCV在图像处理和计算机视觉领域的一些基本应用,如图像灰度化,边缘检测,图像轮廓检测,图像仿射变换,图像直方图均衡化等。

一:图像灰度化

import cv2

# 读取图像文件
img = cv2.imread('image.jpg')

# 将图像从BGR颜色空间转换到灰度空间
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 显示灰度图像
cv2.imshow('Gray Image', gray)

# 保存灰度图像
cv2.imwrite('gray_image.jpg', gray)

# 等待按键操作
cv2.waitKey(0)

# 销毁所有窗口
cv2.destroyAllWindows()

在上述代码中,cv2.imwrite()函数接受两个参数:

  • 第一个参数是保存图像的文件名,包括文件路径(如果需要的话)。
  • 第二个参数是要保存的图像。

保存结果如下:

130d1aad6ee54cd191d61abbbfd59cc4.jpeg

二:边缘检测

import cv2

# 直接以灰度模式读取图像
img = cv2.imread('image.jpg', 0)

# 使用Canny算法检测边缘
edges = cv2.Canny(img, 100, 200)

# 显示边缘图像
cv2.imshow('Edges', edges)

# 保存边缘图像
cv2.imwrite('edges_image.jpg', edges)

# 等待按键操作
cv2.waitKey(0)

# 销毁所有窗口
cv2.destroyAllWindows()

在这段代码中,cv2.imwrite()函数将检测到的边缘图像保存为名为edges_image.jpg的文件。保存结果如下:

6963e42b98b04bbf9d789ad5d6b53298.jpeg

三:图像轮廓检测

import cv2

# 读取图像文件
img = cv2.imread('image.jpg')

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

# 应用阈值操作
ret, thresh = cv2.threshold(gray, 127, 255, 0)

# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)

# 显示结果图像
cv2.imshow('Contours', img)

# 保存结果图像
cv2.imwrite('contours_image.jpg', img)

# 等待按键操作
cv2.waitKey(0)

# 销毁所有窗口
cv2.destroyAllWindows()

在这段代码中,cv2.imwrite('contours_image.jpg', img)负责将包含轮廓的图像保存为名为contours_image.jpg的文件。保存结果如下:

90116a3a399f44409ca5ad9f87c2eef3.jpeg

四:图像仿射变换

import numpy as np
import cv2

# 读取图像文件
img = cv2.imread('image.jpg')

# 获取图像的尺寸
rows, cols, ch = img.shape

# 定义源图像中的三个点
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])

# 定义目标图像中的三个对应点
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])

# 计算仿射变换矩阵
matrix = cv2.getAffineTransform(pts1, pts2)

# 应用仿射变换
dst = cv2.warpAffine(img, matrix, (cols, rows))

# 显示结果图像
cv2.imshow('Affine Transform', dst)

# 保存结果图像
cv2.imwrite('affine_transformed_image.jpg', dst)

# 等待按键操作
cv2.waitKey(0)

# 销毁所有窗口
cv2.destroyAllWindows()

在这段代码中,cv2.imwrite('affine_transformed_image.jpg', dst)负责将应用了仿射变换的图像保存为名为affine_transformed_image.jpg的文件。保存结果如下:

f6ce39a986b546778b9cba498262f20d.jpeg

五:图像直方图均衡化

图像直方图均衡化是一种图像处理技术,用于增强图像的对比度。它通过调整图像的直方图来实现,使得图像的像素值分布更加均匀,从而使得图像的亮度分布更加均匀,增强了图像的对比度。

具体来说,图像直方图均衡化的步骤如下:

  1. 计算直方图:首先计算图像的直方图,即统计每个像素值在图像中出现的次数。

  2. 计算累积直方图:然后计算直方图的累积分布函数(CDF),即每个像素值及其以下所有像素值的累积出现次数。

  3. 映射像素值:最后,根据累积直方图,将原始图像的每个像素值映射到一个新的像素值。映射的目的是使得新的像素值分布更加均匀。

图像直方图均衡化的效果是使得图像的亮度分布更加均匀,增强了图像的对比度,使得图像的细节更加清晰可见。这对于图像的自动处理和分析非常有用,尤其是在图像的亮度分布不均匀时。

import cv2

# 读取图像文件
img = cv2.imread('image.jpg', 0)

# 应用直方图均衡化
equ = cv2.equalizeHist(img)


# 显示均衡化后的图像
cv2.imshow('Equalized', equ)

# 保存均衡化后的图像
cv2.imwrite('equalized_image.jpg', equ)

# 等待按键操作
cv2.waitKey(0)

# 销毁所有窗口
cv2.destroyAllWindows()

在这段代码中,cv2.imwrite('equalized_image.jpg', equ)负责将均衡化后的灰度图像保存为名为equalized_image.jpg的文件。保存结果如下:

c2639e69fadc4ca3b91b892e912c0d0b.jpeg

以上示例展示了OpenCV在图像处理和计算机视觉领域的一些基本应用,为高级功能提供了坚实的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值