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

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

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

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

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

相关文章

《DiffusionDet: Diffusion Model for Object Detection》ICCV2023

摘要 本文提出了一种新的框架DiffusionDet,它将目标检测任务表述为从带噪声的边界框到目标边界框的去噪扩散过程(如图一所示)。在训练阶段,目标边界框逐渐扩散到随机分布,模型学习逆转这一加噪过程。在推理阶段&#…

加深深度学习矩阵计算理解--用人类直觉 走进线性代数(非应试)

文章目录 前言一、向量二、线性组合、空间与基三、矩阵和线性变换四、矩阵乘法与线性变化复合1、矩阵乘法代表线性变换的复合2、实例说明 五、三维空间的线性变换1、基本性质2、直觉理解3、矩阵表示 六、行列式一、行列式的定义2、行列式在空间中的抽象理解 七、逆矩阵 列空间秩…

AIGC学习笔记(5)——AI大模型开发工程师

文章目录 AI大模型开发工程师004 垂直领域的智能在线搜索平台1 智能在线搜索平台需求分析大模型不够“聪明”增强大模型的方式需求分析2 智能在线搜索平台方案设计方案设计技术选型大模型版本GLM-4大模型注册使用Google Cloud平台注册创建可编程的搜索引擎3 智能在线搜索平台代…

【C++滑动窗口】1234. 替换子串得到平衡字符串|1877

本文涉及的基础知识点 C算法:滑动窗口及双指针总结 LeetCode1234. 替换子串得到平衡字符串 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就…

源码分享-Springboot+Vue大学生社团活动平台附源码,sql文件,配套论文

源码获取: 复制链接到浏览器打开即可领取 夸克网盘领取链接:https://pan.quark.cn/s/187d2ca0e3ec 百度网盘领取链接:https://pan.baidu.com/s/1apbO6k1cEqFXV-USf0I2IA?pwdccaj 提取码: ccaj 1.1课题背景及意义 随着现代网络技术发展&#xff0…

南山前海13元一份的猪脚饭

​今天没有带饭,中午打算去中国国有资本资本风投大厦的工地餐点吃个打工餐。 ​快到工地餐点就看到不少工友已经开始津津有味吃饭了哈。其实树下也有很多小鸟在觅食,可能是找一些剩饭吃的样子,大部分是麻雀为主。​ ​肚子有些饿,…

C++builder中的人工智能(29):如何在Windows项目中导入FANN库

这篇文章旨在使用由Steffen Nissen开发的FANN库实现人工神经网络。FANN库支持20多种编程语言,包括Delphi和C Builder。您可以在FANN的官方网站上找到完整信息和文档,并下载FANN的源文件。 步骤: 下载FANN库: 从Nissen的官方网站下…

Java开发人员学习ArkTs笔记(二)-函数与类

大家好,我是一名热爱Java开发的开发人员。目前,我正在学习ARKTS(Advanced Java Knowledge and Technology Stack),并将不断输出我的学习笔记。我将在这里分享我学习ARKTS的过程和心得,希望能够为其他开发人…

maven环境搭建

maven基本知识 https://blog.csdn.net/qq_41187116/article/details/125955085?spm1001.2014.3001.5502 maven环境搭建 maven软件下载 不要去官网下,慢~ 直接相信清华大学吧: https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.9/bin…

jmeter常用配置元件介绍总结之线程组

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之线程组 1.线程组(用户)1.1线程组1.1.setUp线程组和tearDown线程组1.2.Open Model Thread Group(开放模型线程组)1.3.bzm - Arrivals Thread Group(到达线程组)1.4.jpgc - Ultimate Thread Group(终极线程组)1.5.jpgc - St…

八 Bean的生命周期

八、Bean的生命周期 8.1 什么是Bean的生命周期 Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。 所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。 什么时候创建Bean对象? 创建Bean对象的前后会调用什…

【入门篇】桃园结义【算法赛】——多语言版

题目跳转 python import os import sys# 请在此输入您的代码 print(3)C #include <stdio.h> #include <stdlib.h>int main(int argc, char *argv[]) {printf("%d",3);return 0; }C #include <iostream> using namespace std; int main() {// …

速看!!!24下软考系统分析师综合知识真题回忆,考点已更新

2024下半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的系统分析师真题及答案&#xff0c;总共30道题左右。 下半年考试的宝子们可以对答案预估分数&#xff01;准备明年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考点的题目&#xff…

HarmonyOS NEXT:模块化项目 ——修改应用图标+启动页等

涉及官方文档 应用配置文件应用/组件级配置图标资源规范 涉及到app.json5配置文件和module.json5配置文件 1、 icon和label的校验。 IDE从5.0.3.800版本开始&#xff0c;不再对module.json5中的icon和label做强制校验&#xff0c;因此module.json5与app.json5只需要选择其一…

dolphinscheduler

dolphinscheduler 官网地址&#xff1a; https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/about/hardware 1. 概念&#xff1a;dolphinscheduler是一个功能强大的开源调度系统&#xff0c;专为管理和调度大规模数据处理任务设计。 2. 特点&#xff1a; 分布式架构、支持…

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测 目录 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 吐血售&#xff01;聚划算&#xff01;Transforme…

【C++】C++11特性(上)

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 一、列表初始化 二、std::initializer_list 三、右值引用和移…

Maven 构建项目

Maven 是一个项目管理和构建工具&#xff0c;主要用于 Java 项目。它简化了项目的构建、依赖管理、报告生成、发布等一系列工作。 构建自动化&#xff1a;Maven 提供了一套标准化的构建生命周期&#xff0c;包括编译、测试、打包、部署等步骤&#xff0c;通过简单的命令就可以执…

在jquery里,使用$.each()函数循环数组,对象,dom的用法

介绍 $.each() 能遍历一维数组&#xff0c;多维数组&#xff0c;JSON对象&#xff0c;dom2元素。在开发中可以很高效的处理各种数据结构。前提&#xff0c;需要导入jquery 使用 遍历JSON对象 var objDemo {name: linda,age:12, desc: a girl};$.each(objDemo,function(i,va…

UniApp 应用、页面与组件的生命周期详解

UniApp 应用、页面与组件的生命周期详解 在uni-app中包含了 应用生命周期、页面生命周期、和组件生命周期&#xff08; Vue.js的&#xff09;函数。 应用生命周期 应用生命周期仅可在App.vue中监听&#xff0c;在其它页面监听无效。 <script>export default {onLaunc…