opencv常用图像处理操作

OpenCV 处理图像的通用流程通常包括以下几个步骤,根据具体需求可以调整或跳过某些步骤。以下是一个通用的框架:

  1. 读取图像

加载图像文件到内存中以进行后续处理。

import cv2

读取图像

image = cv2.imread(‘image.jpg’) # 彩色图像
gray_image = cv2.imread(‘image.jpg’, cv2.IMREAD_GRAYSCALE) # 灰度图像

  1. 显示图像

在处理过程中,经常需要可视化结果以检查每个步骤的效果。

cv2.imshow(‘Image’, image)
cv2.waitKey(0) # 等待键盘输入
cv2.destroyAllWindows()

  1. 预处理

对图像进行基本的处理,准备输入给算法。

a. 调整大小

resized_image = cv2.resize(image, (width, height))

b. 图像裁剪

cropped_image = image[y1:y2, x1:x2]

c. 图像旋转

(h, w) = image.shape[:2]
center = (w // 2, h // 2)
matrix = cv2.getRotationMatrix2D(center, angle, scale)
rotated_image = cv2.warpAffine(image, matrix, (w, h))

d. 颜色空间转换

•	转为灰度图像:

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

•	转为 HSV 色彩空间:

hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

e. 滤波

•	高斯模糊:

blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

•	中值滤波:

median_blurred = cv2.medianBlur(image, 5)

  1. 图像增强

增强图像的特征以便更好地分析。

a. 直方图均衡化

适用于灰度图像的对比度增强。

equalized_image = cv2.equalizeHist(gray_image)

b. 图像阈值

将图像转换为二值图像。

_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

  1. 特征提取

从图像中提取有用的信息或特征。

a. 边缘检测

使用 Canny 算子提取边缘。

edges = cv2.Canny(image, 100, 200)

b. 轮廓检测

查找图像中的轮廓。

contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

c. 关键点检测

使用 SIFT 或 ORB 检测关键点。

orb = cv2.ORB_create()
keypoints = orb.detect(image, None)

  1. 图像分割

将图像分成多个感兴趣区域。

a. K-Means 分割

Z = image.reshape((-1, 3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
_, labels, centers = cv2.kmeans(Z, K=2, bestLabels=None, criteria=criteria, attempts=10, flags=cv2.KMEANS_RANDOM_CENTERS)
segmented_image = centers[labels.flatten()].reshape((image.shape))

b. GrabCut

mask = np.zeros(image.shape[:2], np.uint8)
bg_model = np.zeros((1, 65), np.float64)
fg_model = np.zeros((1, 65), np.float64)
rect = (50, 50, 450, 290) # 初始矩形
cv2.grabCut(image, mask, rect, bg_model, fg_model, 5, cv2.GC_INIT_WITH_RECT)
result = np.where((mask == 2) | (mask == 0), 0, 1).astype(‘uint8’)
segmented_image = image * result[:, :, np.newaxis]

  1. 图像分析

根据需求进行进一步分析,如对象检测、特征匹配等。

a. 模板匹配

result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

b. 对象检测

使用预训练的模型(如 YOLO 或 Haar Cascade)。

face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5)

  1. 保存结果

将处理后的图像保存到文件。

cv2.imwrite(‘output.jpg’, processed_image)

完整处理流程示例

以下是一个综合处理的示例:

import cv2
import numpy as np

读取图像

image = cv2.imread(‘image.jpg’)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

边缘检测

edges = cv2.Canny(gray_image, 100, 200)

找到轮廓

contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

绘制轮廓

cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

显示结果

cv2.imshow(‘Contours’, image)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结

•	基础处理:读取、显示、裁剪、调整大小等。
•	预处理:灰度化、模糊、颜色空间转换。
•	特征提取与分析:边缘检测、轮廓检测、对象检测。
•	结果保存与展示:保存图像、生成可视化结果。

根据任务需求,选择不同的步骤和算法即可构建高效的图像处理管道。

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

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

相关文章

微服务的负载均衡可以通过哪些组件实现

微服务的负载均衡可以通过多种组件来实现,以下是一些常见的负载均衡组件及其特点: Nginx: Nginx是一款轻量级的HTTP和反向代理服务器,也是一个高性能的负载均衡器。它支持多种负载均衡算法,如轮询、加权轮询、IP哈希等…

zookeeper在确认config无误后仍处于standalone模式的解决方法

jps查看是否有QuorumPeerMain进程 停止服务后该进程仍然存在,输入: ps -ef | grep QuorumPeerMain | grep -v grep | awk {print $2} | xargs kill 之后再启动一次进程 bin/zkServer.sh start 查看状态 bin/zkServer.sh status 发现报错解决&#…

mac中全局 flutter fvm 控制版本遇到的不生效问题解决

1、下载 dart pub global activate fvm 或者 brew tap leoafarias/fvmbrew install fvm fvm use 3.22.1 上面的每次运行都需要加fvm flutter 我觉得麻烦 我期望的是修改全局的 那么就需要使用到fvm global 命令 如: fvm global 3.24.0 但是我发现flutter --vers…

eltable el-table 横向 滚动条常显

又遇到了难受的问题,el-table嵌入在一个div里面,结果因为内容太多,横向、纵向我都得滚动查看! 结果发现横向滚动时只能让它纵向触底后才能进行横向操作,这就很变态,明显不符合用户操作习惯。如下图: 要先纵…

HBase运维需要掌握的技能:监控与日志管理(5)

HBase 监控与日志管理详解 1. 监控工具: HBase 的监控是确保集群稳定运行的关键。通过使用合适的监控工具,管理员可以及时发现性能瓶颈、故障点,并采取相应的措施。 HBase Web UI: 功能:HBase Web UI 是一个内置的 W…

【webApp之h5端实战】项目基础结构搭建及欢迎页面的实现

这是一个实战项目的webapp,主要是使用原生js/css/html来实现我们的业务。预览下面的实战效果,我们将会从0到1实现这个系列的项目。包括大量的原生js知识,css3动画的开发,以及页面的交互实现。 效果预览 项目准备工作 封装的工具类,用于获取原生dom节点,处理原生dom事件的…

构建 Python 包综合指南setup.py和pyproject.toml

一、说明 在 Python 中,有两种常见的方法来创建可以安装的包pip:使用setup.py和使用pyproject.toml下面是每种方法的简要说明。 二、setup.py(传统方法)

【AI模型对比】Kimi与ChatGPT的差距:真实对比它们在六大题型中的全面表现!

文章目录 Moss前沿AI语义理解文学知识数学计算天文学知识物理学知识英语阅读理解详细对比列表总结与建议 Moss前沿AI 【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!! 【VScode】VSCode中的智能AI-G…

THREE.js 入门代码小记(一)

一、坐标系概念 在 three.js 中,相机的默认朝向是沿着 Z 轴的负方向。也就是说,默认情况下,相机会沿着 Z 轴的负方向“看”到场景中的对象,而 X 轴和 Y 轴分别对应水平方向和垂直方向。换句话说,相机的默认位置是 (0,…

[go-redis]客户端的创建与配置说明

创建redis client 使用go-redis库进行创建redis客户端比较简单,只需要调用redis.NewClient接口创建一个客户端 redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379",Password: "",DB: 0, })NewClient接口只接收一个参数red…

图形开发基础之在WinForms中使用OpenTK.GLControl进行图形绘制

前言 GLControl 是 OpenTK 库中一个重要的控件,专门用于在 Windows Forms 应用程序中集成 OpenGL 图形渲染。通过 GLControl,可以轻松地将 OpenGL 的高性能图形绘制功能嵌入到传统的桌面应用程序中。 1. GLControl 的核心功能 OpenGL 渲染上下文&…

shell编程7,bash解释器的 for循环+while循环

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构,在众多编程场景中都有着独特的地位。它们为数据的有序…

springboot vue 会员收银系统 (13) 欢迎页优化 开源

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中,我们完成了会员系统的基本功能 基本完成了收银功能 今天我们对欢迎页进行优化。 1.信息分区 仪表盘将信息分为几个主要区域,包括关键数据统计区、功…

在windows系统用Anaconda搭建运行PyTorch识别安全帽项目的环境

一.背景 我期望基于开源项目实现工业场景中安全帽识别。之前的各种尝试,也不太顺利。发现安全帽识别的开源项目使用的是基于Python的PyTorch实现训练的。上一篇写了Python的安装,发现后续安装其他的并不方便。我为什么选择,下面再详细说原因。…

Spring事务的一道面试题

每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是:通过AOP切面的方式实现的,也就是通过代理模式去实现事务增强。 具体过程是&a…

AI换脸facefusion 3.0.1安装及其使用方法(源代码安装)

文章目录 1. 本文简介2. 软件环境准备软件下载及安装代码下载 3. Conda环境4. 加速环境5. 依赖安装6. 图片测试 今天给大家分享换脸facefusion 3.0.1使用方法。不仅可以对单张图片换脸,也可以对视频换脸。如果是单张图片的话,没有GPU速度也很快&#xff…

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案 背景概述解决方案脚本实现脚本说明使用指南注意事项在CentOS操作系统环境中,若需并发上传特定目录下的.wav文件至HTTP服务器,而系统未安装GNU parallel工具,我们可通过其他方法实现此需求。本文将介绍一种利用Sh…

极兔速递开放平台快递物流查询API对接流程

目录 极兔速递开放平台快递物流查询API对接流程API简介物流查询API 对接流程1. 注册用户2. 申请成为开发者3. 企业认证4. 联调测试5. 发布上线 签名机制详解1. 提交方式2. 签名规则3. 字段类型与解析约定 物流轨迹服务极兔快递单号查询的其他方案总结 极兔速递开放平台快递物流…

Linux命令行解释器的模拟实现

欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:Linux命令行解释器 制作日期:2024.12.04 隶属专栏:linux之旅 本篇简介: 主线带你用ubuntu版系统步步分析实现基础版本的shell;比如支持重定向操作&#xff0…