OpenCV库的一些实用代码示例

news2024/11/24 9:14:04

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的不断更新,新的功能和算法也在不断被添加。

接下来将以该图片为例,展示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()函数接受两个参数:

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

保存结果如下:

二:边缘检测

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的文件。保存结果如下:

三:图像轮廓检测

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的文件。保存结果如下:

四:图像仿射变换

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的文件。保存结果如下:

五:图像直方图均衡化

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

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

  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的文件。保存结果如下:

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

如果想了解更多相关金融工程的内容,可以关注之前的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux Vim的安装和基本使用

Vim 什么是 Vim Vim是一个高度可定制的文本编辑器,源自Unix系统的vi编辑器。它被广泛用于类Unix系统中,包括Linux、Mac OS和Windows平台。Vim特别受到程序员的青睐,因为它提供了丰富的编程功能,如代码补全、编译及错误跳转等。这…

Apache Struts2开发模式漏洞解析与修复

1.引言 在现代Web应用开发中,Apache Struts2是一个广泛使用的MVC框架。然而,当一些开发方便的功能错用在生产环境时,会导致严重的安全隐患。本文将详细解析Struts2开发模式(devMode)带来的安全风险及其修复方法。 2.…

vim常用快捷键问答

vim的光标位置操作快捷键有哪些?怎样记忆它们? 在 Vim 中,光标位置的操作快捷键非常重要,可以帮助你更高效地编辑文本。下面是一些常用的光标位置操作快捷键: 基本移动 h:光标左移一个字符j:光…

【吊打面试官系列-Redis面试题】Redis 是单进程单线程的?

大家好,我是锋哥。今天分享关于 【Redis 是单进程单线程的?】面试题,希望对大家有帮助; Redis 是单进程单线程的? Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消除了传统…

Linux-vim

文章目录 vi和vimvim的基本概念vim的基本操作vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作更改跳至指定的行 vim末行模式命令集列出行号跳到文件中的某一行查找字符保存文件推出vim vi和vim vi/vim的区别简单点来说,…

【初学人工智能原理】【14】机器学习:最后一节课也是第一节课(完结)

前言 本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。 代码及工具箱 本专栏的代码和工具函数已经上传到GitHub:1571859588/xiaobai_AI: 零基础入门人工智能 (github.com),可以找到对应课程的代码 正文 随着…

制作 Docker 镜像

目录 1 docker镜像介绍 1.1 docker的镜像结构 1.2 镜像运行的基本原理 1.3 镜像获得方式 2 构建 docker 镜像 Dockerfile 2.1 Dockerfile 基础参数介绍 2.2 实现参数功能示例 2.2.1 FROM LABEL COPY 2.2.2 ADD 2.2.3 ENV 和 CMD与ENTRYPOINT 2.2.3.1 CMD的替代性 2.2.3.2 EN…

使用3D数字人做视频

用3D数字人做视频 漂亮精致 3D数字人定制4 动作流畅、音乐上的表现 thatgirl 支持私人定制模型 你愿意捐献所有的财产吗 想搭建这样的数字人的请和我们联系 使用3D数字人做视频https://www.jinshuangshi.com/forum.php?modviewthread&tid248 (出处: 金双石科技)

利用session.upload_progress执行文件包含

1.session.upload_progress的作用: session.upload_progress最初是PHP为上传进度条设计的一个功能,在上传文件较大的情况下,PHP将进行流式上传,并将进度信息放在Session中(包含用户可控的值),即…

Ethercat设备数据 转IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 5 设置网关采集ETHERCAT数据 5 6 用IEC61850协议转发数据 7 7 网关使用多个逻辑设备和逻辑节点的方法 9 8 安装NPCAP 10 9 案例总结 11 1 案例说明 设置网关采集EtherCAT设备数据把采集的数据转成IEC61850协议转发给其…

08:Logic软件原理图添加元件

1.导入外部库文件 2.添加元件

Veeam Data Platform 12.2 发布下载,新增功能概览

Veeam Data Platform 12.2 发布下载,新增功能概览 面向混合云和多云的 云端、虚拟和物理环境 备份和恢复 监控和分析 恢复编排 请访问原文链接:https://sysin.org/blog/veeam-data-platform/,查看最新版。原创作品,转载请保留出…

飞致云开源社区月度动态报告(2024年8月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

计算机组成原理:实验三数据通路组成实验

一、实验目的 1.将双端口通用寄存器堆和双端口存储器模块联机; 2.进一步熟悉计算机的数据通路; 3.掌握数字逻辑电路中故障的一般规律,以及排除故障的一般原则和方法; 4.锻炼分析问题与解决问题的能力,在出现故障的…

Windows 10远程桌面连接设置

0 Preface/Foreword 0.1 Remote desktop (远程桌面) Remote Desktop lets you connect to or control this PC from a remote device by using a Remote Desktop client (available for Windows, Android, iOS and macOS). Youll be able to work fro…

15年让爱轮回

15年前,运巧的命运齿轮因一位记者的稿件悄然转动,运巧这个名字,真的是命运的巧合,把她和邦尔骨科连接在了一起,她的人生轨迹因一家医院的善举发生了改变。那时的她,面临生活的重重困境,求学之路…

通义 AI 再次颠覆创作体验:一句话即可生成PPT

🆕通义 AI 再次颠覆创作体验:一句话即可生成PPT 🎉 最近,科技圈再度被通义 AI 的最新功能刷屏!8月30日,通义网页版正式上线了让无数办公族翘首以盼的“PPT 创作”功能。这一革新功能不仅为内容创作者带来了…

制作人偶动画Character Animator

每个人都可以通过表演开始制作动画。无需具备专业的操控知识。 入门模式提供示例人偶,可帮助您快速创建动画。选择人偶或导入人偶,然后添加或录制语音。 每个示例人偶都有一个完备的“控件”面板,其中包含多种姿势和情绪。 您可以通过选择“自…

【TDesign】如何修改CSS变量

Tdesign的组件想通过style定义样式没效果, 可以通过组件api文档修改, 组件提供了下列 CSS 变量,可用于自定义样式。 比如Cell, https://tdesign.tencent.com/miniprogram/components/cell?tabapi 提供了: –td-cell-left-icon-color 图标颜色 –td-cell…

【每日一题】【想通后的诈骗题】Wakey Wakey 牛客挑战赛76 A题 C++

牛客挑战赛76 A题 Wakey Wakey 题目背景 牛客挑战赛76 题目描述 样例 #1 样例输入 #1 2 2 3 2 10000 100000 2333样例输出 #1 1 2014备注 1 ≤ T ≤ 10 1\le T\le 10 1≤T≤10 1 ≤ n , m ≤ 1 0 5 1\le n,m \le 10^5 1≤n,m≤105 1 ≤ p ≤ 1 0 9 1\le p \le 10^9 1…