opencv入门学习总结

opencv学习总结

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

import cv2
# 返回当前安装的 OpenCV 库的版本信息 并且是字符串格式
print(cv2.getVersionString())
"""
作用:它可以读取不同格式的图像文件并将其转换为一个 NumPy 数组
    image = cv2.imread(filename, flags)
    filename: 要读取的图像文件路径,支持绝对路径和相对路径。
    flags(可选): 指定图像读取的方式,控制图像的加载格式。这个参数是可选的,默认为 cv2.IMREAD_COLOR
            cv2.IMREAD_COLOR: 以彩色图像加载,忽略图像的透明度(默认值)。rgb
            cv2.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 cv2

image = 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 np

image = 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_SIMPLEX
    font_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 cv2

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VBA实战】用Excel制作排序算法动画续

为什么会产生用excel来制作排序算法动画的念头,参见【VBA实战】用Excel制作排序算法动画一文。这篇文章贴出我所制作的所有排序算法动画效果和源码,供大家参考。 冒泡排序: 插入排序: 选择排序: 快速排序:…

Go 语言已立足主流,编程语言排行榜24 年 11 月

Go语言概述 Go语言,简称Golang,是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计,并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标,…

《基于深度学习的车辆行驶三维环境双目感知方法研究》

复原论文思路: 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话,求d的话,只和xl-xr有关系,这样一来,是不是只要两张图像上一个测试点的像素位置确定,对应的深…

机器学习在医疗健康领域的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 机器学习在医疗健康领域的应用 机器学习在医疗健康领域的应用 机器学习在医疗健康领域的应用 引言 机器学习概述 定义与原理 发展…

2024136读书笔记|《飞鸟集》——使生如夏花之绚烂,死如秋叶之静美

2024136读书笔记|《飞鸟集》——使生如夏花之绚烂,死如秋叶之静美 《飞鸟集》[印]泰戈尔,一本有意思的诗集,中英文对照着读更有意思。“你是谁,读者,百年后读着我的诗?”让我觉得有些久别重逢,忽…

爱芯元智创始人仇肖莘荣获《财富》中国最具影响力的商界女性

爱芯元智宣布,《财富》(中文版)揭晓了2024年度“中国最具影响力的商界女性”榜单(Most Powerful Women,简称MPW),爱芯元智创始人兼董事长仇肖莘博士荣登《财富》“MPW未来榜”,彰显了…

windows下qt5.12.11使用ODBC远程连接mysql数据库

1、下载并安装mysql驱动,下载地址:https://dev.mysql.com/downloads/ 2、配置ODBC数据源,打开64位的ODBC数据源配置工具:

河南省的一级科技查新机构有哪些?

科技查新,简称查新,是指权威机构对查新项目的新颖性作出文献评价的情报咨询服务。这一服务在科研立项、成果鉴定、项目申报等方面发挥着至关重要的作用。河南省作为中国的重要科技和教育基地,拥有多个一级科技查新机构,为本省及全…

Selenium:设置元素等待、上传文件、下载文件

前言:在工作和学习selenium自动化过程中记录学习知识点,深化知识点 1. 设置元素等待 元素定位之元素等待-- WebDriver提供了两种类型的等待:显示等待和隐式等待。 1.1 显示等待 显式等待使WebDriver等待某个条件处理时继续执行&#xff…

智慧医疗:纹理特征VS卷积特征

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

hadoop健康舆情研究-计算机毕业设计源码05954

目 录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系统流程…

重学 Android 自定义 View 系列(六):环形进度条

目标 自定义一个环形进度条,可以自定义其最大值、当前进度、背景色、进度色,宽度等信息。 最终效果如下(GIF展示纯色有点问题): 1. 结构分析 背景圆环:表示进度条的背景。进度圆环:表示当前…

⚙️ 如何调整重试策略以适应不同的业务需求?

调整 Kafka 生产者和消费者的重试策略以适应不同的业务需求,需要根据业务的特性和容错要求来进行细致的配置。以下是一些关键的调整策略: 业务重要性: 对于关键业务消息,可以增加重试次数,并设置较长的重试间隔&#x…

总结拓展十五:特殊采购业务——寄售采购

1、寄售采购的定义 寄售采购是指供应商提供物料,并将它们存储在你处,在贵公司将这些物料从寄售库存提取(转自有)之前,该供应商一直是这些物料法律上的所有者。只有当这些物料被贵司转自有领用后,供应商才会…

RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段

🚀返回专栏总目录 文章目录 一、内核配置二、GPIO sysfs节点介绍三、命令行控制GPIO3.1、sd导出GPIO3.2、设置GPIO方向3.3、GPIO输入电平读取3.4、GPIO输出电平设置四、Linux 应用控制GPIO4.1、控制输出4.2、输入检测4.3、使用 GPIO 中断沉淀、分享、成长,让自己和他人都能有…

【算法】——二分查找合集

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:二分查找工具 1:最基础模版 2:mid落点问题 一:最…

JAVA学习日记(十五) 数据结构

一、数据结构概述 数据结构是计算机底层存储、组织数据的方式。 数据结构是指数据相互之间以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据,需要结合具体的业务场景来进行选择。 二、常见的数据结构 (一)栈 特点&…

Windows快速部署并使用GitHub上Swift项目

1.科学上网 2.找到项目,release部分,下载最新版的ZIP文件,并且打开,解压。 3.打开cmd,使用你做项目用的虚拟环境,安装必须安装的包文件 pip install ms-swift[llm] -U 类似这样子唰唰唰一堆安装好之后&am…

C++ | Leetcode C++题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; class Solution { public:static constexpr int MOD 1000000007;vector<vector<long>> pow(vector<vector<long>> mat, int n) {vector<vector<long>> ret {{1, 0, 0, 0, 0, 0}};while (n > 0) {…

【精读】Kinodynamic Trajectory Optimization and Control for Car-Like Robots

原来阅读这个板块是我用来写小说灵感和摘抄笔记的&#xff0c;但是CSDN总说我重复率太高&#xff0c;mad以后改用来精读论文了 每天都在写不同的文章&#xff01;为什么&#xff1f;主要还是自我的研究进度跟不上课题组的进度 先给自己点根蜡烛11.15就开组会了我还没读完 ho…