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

深度学习-OpenCV运用(2)

文章目录

  • 一、OpenCV介绍
  • 二、OpenCV运用
    • 1.提取与合并通道
    • 2.图片打码
    • 3.图片组合与缩放
    • 4.图像运算
  • 三、总结

一、OpenCV介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它主要用于实时的图像处理和计算机视觉任务。虽然OpenCV本身更多地聚焦于图像处理和视觉任务,但它也提供了与机器学习相关的功能,使得开发者能够利用它来执行一些基本的机器学习任务。

二、OpenCV运用

OpenCV广泛应用于图像处理、视频分析、目标检测、机器学习等多个领域。这里我们解析为大家介绍图像处理等相关运用。

1.提取与合并通道

这段代码通过提取颜色通道,并对其进行分离,然后进行显示与合并的各种操作。

import cv2
a = cv2.imread(r'./2.png')
# 提取颜色通道
a1 = a[:, :, 0]  # B
a2 = a[:, :, 1]  # G
a3 = a[:, :, 2]  # R
# 或者使用cv2.split()分离
b, g, r = cv2.split(a)

# 显示蓝色通道图像
cv2.imshow('result', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()

# 合并通道
img = cv2.merge((b, g, r))
cv2.imshow('result', img)
cv2.waitKey(10000)
cv2.destroyAllWindows()
  • 访问通道:首先使用索引直接访问了图像的蓝色、绿色和红色通道,并分别将它们存储在a1、a2和a3中。
  • 通道分离:使用cv2.split()函数将图像a的三个颜色通道分离,并分别存储在b、g和r中。
  • 显示通道:使用cv2.imshow()函数显示了蓝色通道的图像,并等待10秒钟,以便用户有足够的时间查看图像,之后创关闭建的窗口。
  • 合并通道:使用cv2.merge()函数将b、g、r(这些已经是分离后又正确对应的颜色通道)合并回了一个三通道图像img,然后显示了这个图像。由于b、g、r是通过cv2.split()从原始图像a中正确分离出来的,因此合并后的图像img将与原始图像a完全相同。

2.图片打码

这段代码尝试将一个随机生成的 100x100x3 数组(即一个包含随机颜色值的 100x100 像素的图像块)赋值给原始图像 a 的一个特定区域,进行图片打码。

import cv2
import numpy as np
a = cv2.imread(r'./2.png')
a[100:200,200:300] = np.random.randint(0,256,(100,100,3))#矩阵赋值必须是相同大小
cv2.imshow('dama',a)
cv2.waitKey(10000)
cv2.destroyAllWindows()

  • 矩阵赋值:随机赋值并在图片a中对应位置显示,0~256指赋值位置颜色范围,100*100是像素大小,3 代表红色(R)、绿色(G)和蓝色(B)通道。
    在这里插入图片描述

3.图片组合与缩放

这段代码完成了图片的组合与缩放。

import cv2
a =cv2.imread('2.png')
b = cv2.imread('30.png')
#图片组合
b[200:300,200:300] = a[150:250,150:250]
cv2.imshow('zuhe',b)
cv2.waitKey(10000)
cv2.destroyAllWindows()
# 图片缩放
a_new = cv2.resize(a,(1000,500))
# a_new = cv2.resize(a,dsize=None,fx=1.5,fy=1.5)
cv2.imshow('a_new',a_new)
cv2.waitKey(10000)
  • 读取图像:读取两个图像文件,并将它们分别存储在变量 a 和 b 中。
  • 图像组合:通过数组切片的方式,从图像 a 中提取一个区域,将这个区域复制到图像 b 的指定位置,实现图像的组合。
  • 缩放图像:将图像 a 的大小调整为1000x500像素。这个操作不会改变原始图像 a,而是创建一个新的图像 a_new 来存储缩放后的结果。(或者通过注释的方法来改变图像大小与原图的倍数)

4.图像运算

# 当像素大于255时,自动模256回绕
a = cv2.imread('2.png')
b = cv2.imread('30.png')
c = a+10
cv2.imshow('yuantu',a)
cv2.imshow('tupian', c)
cv2.waitKey(10000)

c = a[50:450, 50:400] + b[50:450, 50:400]
cv2.imshow('a+b', c)
cv2.waitKey(10000)
cv2.destroyAllWindows()
# 当像素大于255时,该值为255
a = cv2.imread('2.png')
b = cv2.imread('30.png')
b = cv2.resize(b, (400, 400))
a = cv2.resize(a, (400, 400))
c = cv2.add(a, b)
cv2.imshow('a+b', c)
cv2.waitKey(10000)
cv2.destroyAllWindows()
  • 不解决溢出:将图像a的每个像素值加10,同时将图像a和b的特定区域相加,但未处理溢出。超过255,在OpenCV中,它们会自动回绕到0-255的范围内。
  • 解决溢出:使用cv2.add()函数来相加两个图像。这个函数会处理溢出,确保结果图像的像素值不会超过255(即,任何超过255的像素值都会被截断为255)。

三、总结

OpenCV是一个功能强大的计算机视觉库,可以轻松对图片进行处理。深度学习和OpenCV的结合可以充分利用两者的优势,提高图像处理的效率和效果。这种结合使得图像处理系统更加灵活和强大,能够应对各种复杂的视觉任务。


http://www.kler.cn/a/281375.html

相关文章:

  • 记一次SQL注入漏洞获取管理员账号密码
  • Python算法工程师面试整理-线性代数
  • 合宙LuatOS产品规格书——Air700EAQ
  • error:0308010C:digital envelope routines::unsupported【超详细图解】
  • 【C++】—— 模版初阶
  • 如何使用ssm实现校园二手交易市场+vue
  • 决策树和随机森林介绍
  • 无人机侦测:光电识别追踪设备(双光)技术详解
  • Redis increment 函数处理并发序列号
  • 变电站智能巡检机器人:构建智能化电力运维新模式
  • 2024-8月,有没有那一瞬间让你悟到了过去10多年没有想明白的事
  • Ruby Web服务开发:构建高效RESTful API的秘诀
  • SpringCloud之一IDEA导入已有微服务项目并启动服务
  • 基于jstack、jmap、jstat 进行JVM监控
  • Flask 安装和应用
  • 洛谷刷题(6)
  • kubectl陈述式资源管理方式、声明式资源管理
  • 【PyTorch][chapter 27][李宏毅深度学习][transformer-1]
  • SpringBoot集成kafka-监听器手动确认接收消息(主要为了保证业务完成后再确认接收)
  • 探索异步之美:aiohttp库的魔力与奥秘