一、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的结合可以充分利用两者的优势,提高图像处理的效率和效果。这种结合使得图像处理系统更加灵活和强大,能够应对各种复杂的视觉任务。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐