深度学习-OpenCV运用(3)

2024-09-03 10:36
文章标签 学习 opencv 深度 运用

本文主要是介绍深度学习-OpenCV运用(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、简介
  • 二、OpenCV运用
    • 1. 图片扩充
    • 2.图像阈值处理
    • 3.添加椒盐噪声
  • 三、总结

一、简介

深度学习(Deep Learning)与OpenCV(Open Source Computer Vision Library)的结合为计算机视觉领域带来了强大的解决方案。OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了大量的视觉处理算法,包括但不限于图像和视频处理、特征检测、对象识别等。

二、OpenCV运用

1. 图片扩充

import cv2a = cv2.imread('2.png')
top, bottom, left, right = 50, 50, 50, 50constant = cv2.copyMakeBorder(a, top, bottom, left, right, borderType=cv2.BORDER_CONSTANT, value=(0, 0, 0))
reflect = cv2.copyMakeBorder(a, top, bottom, left, right, borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(a, top, bottom, left, right, borderType=cv2.BORDER_REFLECT101)
replicate = cv2.copyMakeBorder(a, top, bottom, left, right, borderType=cv2.BORDER_REPLICATE)
wrap = cv2.copyMakeBorder(a, top, bottom, left, right, borderType=cv2.BORDER_WRAP)
cv2.imshow('a', a)
cv2.waitKey(0)
cv2.imshow('constant', constant)
cv2.waitKey(0)
cv2.imshow('reflect', reflect)
cv2.waitKey(0)
cv2.imshow('reflect101', reflect101)
cv2.waitKey(0)
cv2.imshow('replicate', replicate)
cv2.waitKey(0)
cv2.imshow('wrap', wrap)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.BORDER_CONSTANT(常量边框):
    • 使用指定的颜色值填充边框。在您的代码中,颜色被设置为黑色((0, 0, 0))。
    • 使用场景:当你需要在图像周围添加纯色边框时,比如为了美观或标记。
  • cv2.BORDER_REFLECT(反射边框):
    • 边框像素是图像边缘像素的镜像反射,但不包括边缘本身。
    • 使用场景:当你需要图像边缘的平滑过渡,但不想引入新的颜色或内容时。
  • cv2.BORDER_REFLECT101(反射101边框):
    • 与BORDER_REFLECT类似,但包括边缘像素的镜像。
    • 使用场景:与BORDER_REFLECT相似,但如果你需要确保边缘像素也被考虑在内。
  • cv2.BORDER_REPLICATE(复制边框):
    • 边框像素是图像边缘像素的复制。
    • 使用场景:当你需要图像边缘的精确复制时,比如在某些图像处理算法中,边缘像素的值对结果有重要影响。
  • cv2.BORDER_WRAP(包裹边框):
    • 边框像素是从图像的另一侧“包裹”过来的。例如,左边缘的边框像素是从图像的右边缘取的。
    • 使用场景:当你处理的是具有周期性或循环性质的图像时,比如全景图像或某些类型的纹理图像。

2.图像阈值处理

import cv2image = cv2.imread('3.png', cv2.IMREAD_GRAYSCALE)
ret, binary = cv2.threshold(image, 180, 255, cv2.THRESH_BINARY)  # maxval:0
ret1, binaryinv = cv2.threshold(image, 180, 255, cv2.THRESH_BINARY_INV)  # 0:maxval
ret2, trunc = cv2.threshold(image, 190, 255, cv2.THRESH_TRUNC)  # thresh:当前灰度值
ret3, tozero = cv2.threshold(image, 100, 255, cv2.THRESH_TOZERO)  # 当前灰度值:0
ret4, tozeroinv = cv2.threshold(image, 190, 255, cv2.THRESH_TOZERO_INV)  # 0:当前灰度值cv2.imshow('image', image)
cv2.waitKey(0)
cv2.imshow('binary', binary)
cv2.waitKey(0)
cv2.imshow('binaryniv', binaryinv)
cv2.waitKey(0)
cv2.imshow('trunc', trunc)
cv2.waitKey(0)
cv2.imshow('tozero', tozero)
cv2.waitKey(0)
cv2.imshow('tozeroinv', tozeroinv)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.THRESH_BINARY:这是最基本的阈值类型。如果像素值大于阈值,则将其设置为maxval(在您的例子中为255),否则将其设置为0。
  • cv2.THRESH_BINARY_INV:这与THRESH_BINARY相反。如果像素值小于阈值,则将其设置为maxval,否则设置为0。
  • cv2.THRESH_TRUNC:如果像素值大于阈值,则将其设置为阈值本身,否则保持不变。这通常用于去除图像中的亮点。
  • cv2.THRESH_TOZERO:如果像素值小于阈值,则将其设置为0,否则保持不变。这有助于从图像中去除暗区域。
  • cv2.THRESH_TOZERO_INV:这与THRESH_TOZERO相反。如果像素值大于阈值,则保持不变,否则设置为0。这有助于从图像中去除亮区域。

3.添加椒盐噪声

import cv2  
import numpy as np
def add_peppersalt_noise(image, n=10000):result = image.copy()h, w = image.shape[:2]for i in range(n):x = np.random.randint(1, h)y = np.random.randint(1, w)if np.random.randint(0, 2) == 0:result[x, y] = 0else:result[x, y] = 255return resultimage = cv2.imread('3.png')
cv2.imshow('a', image)
cv2.waitKey(0)
noise = add_peppersalt_noise(image)
cv2.imshow('noise', noise)
cv2.waitKey(0)
  • 定义函数:定义函数,这个函数接收一个图像和一个可选的整数 n(默认为
    10000)作为参数。它的目的是向图像中添加椒盐噪声,即随机地将图像中的像素点设置为黑色(0)或白色(255)。
  • 处理图像:创建一个图像的副本,以避免修改原始图像。然后,获取图像的高度 h 和宽度 w,循环 n 次,每次循环都随机选择一个像素点 (x,
    y),并将其设置为黑色或白色。
  • 添加噪声并显示结果:读取图像并显示原始图像,调用函数添加噪声,并显示结果图像。

三、总结

OpenCV作为一个开源的计算机视觉库,具有显著的优点和一定的缺点。以下是对其优缺点的详细分析:

  • 优点
    • 开源与免费:OpenCV是开源的,允许用户自由使用、修改和分发,且对非商业应用和商业应用都是免费的。这大大降低了使用成本,促进了计算机视觉技术的普及和发展。
    • 跨平台性:OpenCV支持多个操作系统,包括Windows、Linux、Mac OS等,且可以在不同平台上使用相同的代码。这种跨平台性使得OpenCV的应用范围更加广泛,便于开发者在不同环境下进行开发和部署。
    • 多功能性:OpenCV提供了丰富的图像处理和计算机视觉算法,包括图像增强、特征提取、目标检测、人脸识别等。这些功能能够满足各种视觉应用的需求,使得开发者能够轻松实现复杂的计算机视觉任务。
    • 高效性能:OpenCV使用C/C++编写,具有高效的运行速度,可以处理实时视频流和大规模图像数据。这使得OpenCV在实时性要求较高的应用场景中表现出色。
    • 可扩展性:OpenCV支持多种编程语言,包括C++、Python、Java等,也支持与其他库的集成。这种可扩展性使得OpenCV能够与其他技术栈无缝对接,方便进行开发和部署。
  • 缺点
    • 学习曲线陡峭:OpenCV的接口相对复杂,需要一定的学习成本。对于初学者来说,可能需要花费一些时间来理解和掌握其使用方法。此外,OpenCV的文档和示例虽然丰富,但也可能存在不够直观或难以理解的情况。
    • 部分功能不完善:尽管OpenCV提供了很多功能,但对于一些特定的应用场景,可能还需要额外的算法或库来完成更复杂的任务。这可能需要开发者自行实现或寻找其他解决方案。
    • 依赖性:OpenCV可能需要依赖于其他库和工具,例如NumPy、Matplotlib等。这增加了开发和部署的复杂性,需要开发者在项目中额外考虑这些依赖项的管理和配置。
    • 深度学习支持相对较弱:虽然OpenCV提供了一些基本的机器学习算法,但在深度学习方面的支持相对较弱。对于需要深度学习功能的项目,可能需要借助其他框架(如TensorFlow、PyTorch等)来完成深度学习任务。

这篇关于深度学习-OpenCV运用(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132729

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程