深度学习-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

相关文章

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx