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

opencv入门学习总结

opencv学习总结

不多bb,直接上代码!!!
案例一:

import cv2
# 返回当前安装的 OpenCV 库的版本信息 并且是字符串格式
print(cv2.getVersionString())
"""
作用:它可以读取不同格式的图像文件并将其转换为一个 NumPy 数组image = cv2.imread(filename, flags)filename: 要读取的图像文件路径,支持绝对路径和相对路径。flags(可选): 指定图像读取的方式,控制图像的加载格式。这个参数是可选的,默认为 cv2.IMREAD_COLORcv2.IMREAD_COLOR: 以彩色图像加载,忽略图像的透明度(默认值)。rgbcv2.IMREAD_GRAYSCALE: 以灰度图像加载,返回一个单通道图像(没有颜色信息)cv2.IMREAD_UNCHANGED: 加载图像包括其 alpha 通道,即加载图像时包括透明度信息(如果有的话)。rgba
"""
image = cv2.imread("opencv_logo.jpg")
print(image.shape)"""
作用:用于在窗口中显示图像。该函数可以将图像或视频帧显示在一个新的窗口中。cv2.imshow(window_name, image)window_name:窗口的名称,是一个字符串类型的参数image:要显示的图像。它通常是一个 NumPy 数组,表示图像数据
"""
cv2.imshow("image", image)
# 等待用户输入(例如按键事件)任意按键退出"""
作用:用于等待用户输入键盘事件cv2.waitKey(delay)delay: 延迟时间,单位:毫秒
"""
cv2.waitKey()# 关闭所有打开的窗口
cv2.destroyAllWindows()

案例二:

import cv2image = cv2.imread("opencv_logo.jpg")"""
1.这段代码展示了如何分别显示 OpenCV 彩色图像的三个颜色通道(蓝色、绿色和红色)单独的图像。
2.OpenCV 中加载的彩色图像是以 BGR(蓝色、绿色、红色)顺序存储的,而不是常见的 RGB 顺序。image[:, :, 0]: 表示图像的蓝色通道。image[:, :, 1]: 表示图像的绿色通道。image[:, :, 1]: 表示图像的红色通道。这里使用了数组的切片,返回了一个二维数组。例如:import numpy as np# 假设这是一个 3x3 的图像,每个像素有 3 个通道image = np.array([[[100, 150, 200], [120, 170, 220], [140, 190, 240]],[[110, 160, 210], [130, 180, 230], [150, 200, 250]],[[120, 170, 220], [140, 190, 240], [160, 210, 260]]])# 提取蓝色通道blue_channel = image[:, :, 0]print(blue_channel)输出:[[100 120 140][110 130 150][120 140 160]]
"""
cv2.imshow("blue", image[:, :, 0])
cv2.imshow("green", image[:, :, 1])
cv2.imshow("red", image[:, :, 2])"""作用:将图像从一种颜色空间转换到另一种颜色空间cv2.cvtColor(src, code)src:输入图像,通常是一个 NumPy 数组(例如通过 cv2.imread() 读取的图像)。code:颜色空间转换代码,指定要应用的转换类型常见的几种:cv2.COLOR_BGR2RGB:从 BGR 转换为 RGB。cv2.COLOR_BGR2GRAY:从 BGR 转换为灰度图像。cv2.COLOR_RGB2BGR:从 RGB 转换为 BGR。
"""
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("gray", gray)cv2.waitKey()

在这里插入图片描述

案例三:


import cv2
# 是在对一个图像 image 进行切割操作,返回一个新的图像区域
image = cv2.imread("opencv_logo.jpg")crop = image[10:170, 40:200]cv2.imshow("crop", crop)
cv2.waitKey()

在这里插入图片描述

案例四:


import cv2
import numpy as npimage = np.zeros([300, 300, 3], dtype=np.uint8)
"""
作用:在图像上绘制一条直线cv2.line(image, start_point, end_point, color, thickness)image:要在其上绘制线条的图像(通常是一个 NumPy 数组)。start_point:线条的起始点坐标,格式为 (x, y),其中 x 是水平坐标(列),y 是垂直坐标(行)。end_point:线条的结束点坐标,格式为 (x, y)。color:线条的颜色,通常是 BGR 格式的元组,即 (蓝色, 绿色, 红色)。thickness:线条的粗细,单位是像素。
"""
cv2.line(image, (100, 200), (250, 250), (255, 0, 0), 2)"""
作用:在图像上绘制一个矩形cv2.rectangle(image, start_point, end_point, color, thickness)image:目标图像,矩形将被绘制在此图像上。start_point:矩形的左上角坐标,格式为 (x, y),其中 x 为水平坐标(列),y 为垂直坐标(行)end_point:矩形的右下角坐标,格式同样为 (x, y)。color:矩形的颜色,采用 BGR(蓝色、绿色、红色)格式。thickness:线条的粗细,单位是像素。
"""
cv2.rectangle(image, (30, 100), (60, 150), (0, 255, 0), 2)"""
作用:在图像上绘制一个圆形cv2.circle(image, center, radius, color, thickness)image:目标图像,圆形将被绘制在此图像上。center:圆形的中心点坐标,格式为 (x, y),其中 x 为水平坐标(列),y 为垂直坐标(行)。radius:圆形的半径,单位为像素。color:圆形的颜色,采用 BGR(蓝色、绿色、红色)格式。thickness:圆形的边框宽度,单位为像素。如果设置为负值(如 -1),则表示填充圆形。
"""
cv2.circle(image, (150, 100), 20, (0, 0, 255), 3)"""
作用:在图像上添加文本cv2.putText(image, text, position, font, font_scale, color, thickness, line_type)image:目标图像,文本将被绘制在此图像上。text:要绘制的文本字符串。position:文本的左下角位置(起始坐标),格式为 (x, y),其中 x 是水平坐标(列),y 是垂直坐标(行)。font:字体类型(通过 OpenCV 提供的常量来指定)。0 表示使用 OpenCV 默认字体 cv2.FONT_HERSHEY_SIMPLEXfont_scale:字体的缩放比例(即字体大小)。color:文本颜色,采用 BGR(蓝色、绿色、红色)格式。thickness:文本的线条粗细,单位为像素。line_type:线条类型,用于指定文本的抗锯齿(通常设置为 1 表示抗锯齿)。
"""
cv2.putText(image, "hello", (100, 50), 0, 1, (255, 255, 255), 2, 1)cv2.imshow("image", image)
cv2.waitKey()

在这里插入图片描述

案例5:

首先我们先明白什么是噪点?

噪点(Noise) 是指图像中出现的随机、无关的像素值,它们通常表现为干扰、杂散的亮度或颜色变化,可能会影响图像的质量和分析。噪点通常是由于图像捕获、传输、处理等过程中引入的误差或不稳定因素。

如何去除噪点?

​ 去噪点(去噪)是图像处理中常见且重要的一步,目的是减少图像中的噪声,恢复图像的质量和细节。不同类型的噪点(如椒盐噪声、高斯噪声等)可以通过不同的去噪方法进行处理。下面是一些常见的去噪方法:


import cv2image = cv2.imread("plane.jpg")# 用均值滤波去除噪点
mean_blur = cv2.blur(image, (5, 5))  # 5x5 窗口
# 用高斯滤波去除噪点
gauss = cv2.GaussianBlur(image, (5, 5), 0) # 5x5 窗口 标准差为 0
# 用中值滤波去除噪点
median = cv2.medianBlur(image, 5) # 5 是邻域大小
# 用双边滤波去除噪点
# 参数1:直径,参数2:颜色空间标准差,参数3:坐标空间标准差
bilateral_blur = cv2.bilateralFilter(image, 9, 75, 75)cv2.imshow("image", image)
cv2.imshow("mean_blur", mean_blur)
cv2.imshow("gauss", gauss)
cv2.imshow("median", median)
cv2.imshow("bilateral_blur", bilateral_blur)cv2.waitKey()

在这里插入图片描述

​ 除了以上opencv中自带的函数去除噪点,还可以使用深度学习模型更好的去除噪点。

​ OpenCV本身并不直接提供深度学习去噪的实现,但你可以利用深度学习框架(如TensorFlow、PyTorch等)和预训练的去噪模型(如DnCNN、U-Net等)来进行去噪。下面是一个使用深度学习去噪的简化示例(假设你已经有一个训练好的模型)。

import cv2
import torch
import numpy as np# 加载训练好的模型 (假设你已经训练了一个去噪模型)
model = torch.load("denoising_model.pth")  # 这是一个假设的模型路径
model.eval()# 读取图像
image = cv2.imread("plane.jpg")
image_tensor = torch.from_numpy(image).float().unsqueeze(0).unsqueeze(0)  # 转换为 PyTorch Tensor# 将图像输入模型进行去噪
with torch.no_grad():denoised_image_tensor = model(image_tensor)# 将去噪后的 Tensor 转换回图像格式
denoised_image = denoised_image_tensor.squeeze().numpy().astype(np.uint8)# 显示原图像和去噪后的图像
cv2.imshow("Original Image", image)
cv2.imshow("Denoised Image (Deep Learning)", denoised_image)cv2.waitKey(0)
cv2.destroyAllWindows()

总结:

1. 均值滤波:适用于轻度噪声,简单但可能模糊图像细节。

2. 中值滤波:特别适用于去除椒盐噪声,能够保留边缘细节。

3. 高斯滤波:适用于去除高斯噪声,可以有效平滑图像。

4. 双边滤波:去噪的同时能够保留图像边缘,适用于需要保持细节的情况。

5. 深度学习去噪:通常提供最好的去噪效果,尤其适用于复杂的噪声类型,但需要预训练的深度学习模型和计算资源。

可以根据噪声的类型和图像的特性选择合适的去噪方法。

总结:

1. 均值滤波:适用于轻度噪声,简单但可能模糊图像细节。

2. 中值滤波:特别适用于去除椒盐噪声,能够保留边缘细节。

3. 高斯滤波:适用于去除高斯噪声,可以有效平滑图像。

4. 双边滤波:去噪的同时能够保留图像边缘,适用于需要保持细节的情况。

5. 深度学习去噪:通常提供最好的去噪效果,尤其适用于复杂的噪声类型,但需要预训练的深度学习模型和计算资源。

可以根据噪声的类型和图像的特性选择合适的去噪方法。

目前更新到这里,后续会增加。

相关文章:

opencv入门学习总结

opencv学习总结 不多bb,直接上代码!!! 案例一: import cv2 # 返回当前安装的 OpenCV 库的版本信息 并且是字符串格式 print(cv2.getVersionString()) """ 作用:它可以读取不同格式的图像文…...

C/C++内存管理 | new的机制 | 重载自己的operator new

一、C/C内存分布 1. 内存分区 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信 .堆用于程序运行时动态内…...

知识库管理系统:企业数字化转型的加速器

在数字化转型的大潮中,知识库管理系统(KBMS)已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性,以及如何快速搭建企业知识库。 知识库管理系统是什么? 知识库管理系统…...

uniapp 如何使用vuex store (亲测)

首先是安装: npm install vuexnext --save 安装之后,Vue2 这样写 不管在哪里,建立一个JS文件,假设命名:store.js 代码这样写: import Vue from vue; import Vuex from vuex;Vue.use(Vuex);const store…...

[编译报错]ImportError: No module named _sqlite3解决办法

1. 问题描述&#xff1a; 在使用python进行代码编译时&#xff0c;提示下面报错&#xff1a; "/home/bspuser/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py", line 18, in <module>import sqlite3File "/usr/local/lib/python2.7/sqlite3/_…...

【旷视科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

python学习记录16

字符串总结 python程序使用unicode编码&#xff0c;中文字符与英文字符都占一个字符&#xff0c;但英文字符只占一个字节&#xff0c;中文字符若按照utf-8格式编码占3个字节。 &#xff08;1&#xff09;字符串常用方法 1&#xff09;大小写转化 string.upper()#将所有字母…...

AI 大模型在软件开发中的角色

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/402a907e12694df5a34f8f266385f3d2.png#pic_center> &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代…...

React中类组件和函数组件的理解和区别

react代码模块分为类组件和函数组件。 从语法和定义、内部状态管理、生命周期、性能、可读性和维护性、上下文、集成状态管理库等角度对比React中类组件和函数组件。 1、语法和定义 类组件&#xff1a; 使用 ES6 的类&#xff08;class&#xff09;语法定义的 React 组件。…...

Day62||prim算法精讲 |kruskal算法精讲

prim算法精讲 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 题目描述 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&#xff0c;每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路&#xff0c;方便运输。 不同岛屿之间&#xff0c;路途距离不同&…...

upload-labs通关练习

目录 环境搭建 第一关 第二关 第三关 第四关 第五关 第六关 第七关 第八关 第九关 第十关 第十一关 第十二关 第十三关 第十四关 第十五关 第十六关 第十七关 第十八关 第十九关 第二十关 总结 环境搭建 upload-labs是一个使用php语言编写的&#xff0c…...

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题&#xff0c;你需要先安装好主题&#xff0c;然后可以导入我的json文件一键配置。 需要json界面配置文件的&#xff0c;可以在评论区回复&#xff0c;看见评论我会私发给你。~...

RWKV-5/6 论文被 COLM 2024 收录

由 Bo PENG 和 RWKV 开源社区共同完成的 RWKV-5/6架构论文《Eagle and Finch: RWKV with Matrix-Valued States and Dynamic Recurrence》被顶级会议 COLM 2024 收录。 这是继 RWKV-4 架构论文《RWKV: Reinventing RNNs for the Transformer Era》被 EMNLP 2023 收录之后&…...

MinIO分片下载超大文件

一、前言 各位亲爱的们&#xff0c;之前介绍过了上传超大文件到MinIO&#xff1a; MinIO分片上传超大文件&#xff08;纯服务端&#xff09;MinIO分片上传超大文件&#xff08;非纯服务端&#xff09; 这里最后再补充一下从MinIO下载超大文件。 二、从MinIO分片下载大文件 …...

Vue3 -- 新组件【谁学谁真香系列6】

Teleport Teleport是什么?–Teleport是一种能够将我们的组件html结构移动到指定位置的技术。 父组件: <template><div calss="outer"><h2>我是App组件</h2><img src="https://z1.ax1x.com/2023/11/19/piNxLo4.jpg" alt=&qu…...

Openstack3--本地仓库搭建(ftp源搭建失败)

上传镜像 后面的ftp源做不了&#xff0c;请将下面的本地openstack源在控制节点和计算节点都配置 在控制节点上传&#xff0c;安装ftp并配置启动后再在计算节点配置 将openStack-train.iso文件通过MobaXterm远程连接软件上传至控制节点 /opt 目录下 挂载 进入 /opt 目录 创建…...

【初阶数据结构与算法】链表刷题之移除链表元素、反转链表、找中间节点、合并有序链表、链表的回文结构

文章目录 一、移除链表元素思路一思路二 二、合并两个有序链表思路&#xff1a;优化&#xff1a; 三、反转链表思路一思路二 四、链表的中间节点思路一思路二 五、综合应用之链表的回文结构思路一&#xff1a;思路二&#xff1a; 一、移除链表元素 题目链接&#xff1a;https:…...

【PGCCC】Postgresql Toast 原理

前言 上篇博客讲述了 postgresql 如何存储变长数据&#xff0c;它的应用主要是在 toast 。Toast 在存储大型数据时&#xff0c;会将它存储在单独的表中&#xff08;称为 toast 表&#xff09;。因为 postgresql 的 tuple&#xff08;行数据&#xff09;是存在在 Page 中的&…...

vue3使用element-plus,树组件el-tree增加引导线

vue3使用element-plus&#xff0c;树组件el-tree增加引导线 vue3项目element-plus&#xff0c;树组件el-tree增加引导线 element-plus组件库的el-tree样式 因为element的样式不满足当前的的需求&#xff0c;UI图&#xff0c;所以对el-tree进行增加了引导线 修改样式如下&am…...

AlphaFold3中文使用说明

目录 1. 在线网站用例1. 使用json输入预测蛋白结构 2. 本地命令行2.1 运行示例2.2 AF3输入输入格式JSON兼容性JSON最外层&#xff08;Top-level&#xff09;结构序列多序列比对MSA结构模板键 用户提供CCDs 2.3 AF3输出 AlphaFold3&#xff08;AF3&#xff09;可以通过在线网站或…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...