深度学习在计算机视觉中的应用

在当今的技术世界中,深度学习为计算机视觉领域带来了革命性的变化。计算机视觉赋予了计算机实时识别和处理三维物体的能力,这在机器人自主导航和移动性方面显得尤为重要。通过深度学习,能够进行高级的计算和处理任务,从而实现更加智能的视觉识别系统。

如果还没有阅读过之前关于计算机视觉和OpenCV的文章,可以通过以下链接访问:

  • 文章1:使用OpenCV的计算机视觉入门
  • 文章2:使用OpenCV和Python执行计算机视觉任务
  • 文章3:计算机视觉项目中的一些高级OpenCV操作
  • 文章4:计算机视觉项目中的一些高级OpenCV函数(续)
  • 文章5:PythonOpenCV操作初学者指南:旋转

本文将介绍Python编程语言中OpenCV包的更多特性。为了便于学习,将尝试对一张图片进行OpenCV操作。可以通过以下链接下载图片,或者保存下面提供的图片。

在OpenCV的学习过程中,现在应该已经熟悉了首要任务——将图片加载到系统内存中。为此,需要导入必要的包到系统内存中。以下是导入和加载代码:

import cv2 import os import numpy as np # 加载图片到系统内存 image = cv2.imread('C:/Users/Shivek/Pictures/Nature.jpg', flags=cv2.IMREAD_COLOR) cv2.imshow('Analytics Vidhya Computer Vision- Nature', image) cv2.waitKey() cv2.destroyAllWindows()

以上代码块的主要点如下:

  • 将必要的Python包导入到系统内存中。
  • 使用imread()方法将数据(图片)从硬盘加载到系统RAM中。
  • 以默认/标准格式加载图片,即彩色格式。

以上代码块的输出结果如下:

图片看起来很好!但在广阔的平原上,可以看到只有一棵树。让使用OpenCV和NumPy技术来修复这个问题。

裁剪技术涉及使用数字手段对图片进行物理调整。裁剪在隔离图片的所需部分或将观众的注意力引向图片的特定区域时非常有用。正如已经知道的,OpenCV将图片表示为包含代表像素和强度的整数的NumPy数组,因此,通过索引和切片NumPy数组的部分,实际上是在隔离特定的像素,从而隔离图片的特定部分,从而允许有效地裁剪图片。

由于裁剪图片需要索引和切片,因此了解矩阵的形状,即NumPy数组的形状非常重要。这是因为将使用索引值来执行此任务。

print(image.shape) print("像素行数: %d 行"%(image.shape[0])) print("像素列数: %d 列"%(image.shape[1])) print("颜色通道: %d 颜色通道"%(image.shape[2]))

以上代码行的输出结果如下:

从以上图片中,可以看到图片具有以下属性:

  • 459像素行数。
  • 736像素列数。
  • 3颜色通道-默认情况下使用BGR,而不是RGB。会发现红色和蓝色颜色通道已经交换。

正如之前看到的,下载的图片显示了一个地理平原,上面有一棵树。图片看起来很好,但将尝试在平原上增加更多的树。

目标是在平原上增加更多的树。

请记住,正在处理数组-尽管它是一张图片-但它以数组的形式存在。对于数组,可以隔离值的一部分,并设置该特定部分持有一组新的值。本质上,要做的就是获取形成树的像素数组,然后设置原始图像中的匹配像素数组等于树的像素,从而在原始图像中反映一棵树。

为了解释上述方法,请允许为提供一个小型示例。

这是一个小型示例,用于解释将要执行的过程。

import numpy as np numpy_zeros = np.zeros(shape=(6, 6)) print(numpy_zeros) numpy_ones = np.ones(shape=(4, 4)) print(numpy_ones) numpy_zeros[1:5, 1:5] = numpy_ones print(numpy_zeros)

以上代码块的输出结果如下:

已经成功地操作了数组。裁剪的过程类似-希望对这个过程有了更好的理解。让将其扩展!

目标是找到构成树的像素数组,隔离这个像素数组,并使原始数组的部分等于树的像素数组。听起来很难,但实际上并不难,而且非常有趣。

首先找到包含树的矩阵如下:

tree = image[320:393, 570:665] cv2.imshow('Nature Tree', tree) cv2.waitKey() cv2.destroyAllWindows()

让将上述像素的输出显示在屏幕上-输出结果如下:

  • 图片应该是这样的。
  • 灰色区域可见,因为图片很小。
  • 由于图片的大小,没有标题栏可见。

如果想看到全窗口的图片,可以最大化窗口,之后将看到以下输出:

让查看像素数组的形状:

print('树的形状: ', tree.shape) print("像素行数: %d 行"%(tree.shape[0])) print("像素列数: %d 列"%(tree.shape[1])) print("颜色通道: %d 颜色通道"%(tree.shape[2]))

以上代码块的输出结果如下:

现在已经得到了树的像素数组,以及数组的大小,可以将原始图像中的数组部分设置为等于树的像素数组-记住,两个像素数组需要具有相同的大小。

image[333:406, 0:95] = tree image[333:406, 95:190] = tree[:, ::-1, :] image[323:396, 190:285] = tree[:, ::-1, :] image[323:396, 285:380] = tree[:, :, :] image[312:385, 380:475] = tree[:, ::-1, :] image[315:388, 475:570] = tree

现在让将原始图像显示在屏幕上。期望在图片中找到更多的树:

cv2.imshow('Cropped Trees', image) cv2.waitKey() cv2.destroyAllWindows()

以上代码块的输出结果如下:

成功地从图片中裁剪了树,并使用复制和粘贴的方法在原始图片中添加了更多的树。

本篇文章介绍了高级OpenCV+NumPy操作:裁剪、复制和粘贴。希望发现这篇文章有启发性并且有趣,并且对Python中的OpenCV包有了新的认识。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485