OpenCV技术及其应用

OpenCV,即开源计算机视觉库,由Intel和Willow Garage开发,于1999年正式发布,并在2000年由Willow Garage继续开发。OpenCV与Python结合,用于解决现实世界的问题,支持Python、Java和MATLAB等多种语言。OpenCV的应用包括目标检测、人脸识别、物体识别、人类活动检测、图像拼接、场景识别、数据库中图像识别、去除红眼和跟踪眼球运动等实时应用。由于其广泛的应用,OpenCV在许多领域,如跨国公司、政府组织和研究小组中迅速发展。作为开源项目,OpenCV拥有庞大的用户社区,下载量超过1800万次。它优化了2500个算法,用于解决机器学习和深度学习模型问题,主要目的是加速机器产品,如机器人的发展。随着技术的进步,OpenCV的应用也在不断扩展。

Python简介

Python是一种开源编程语言,简单易学,语法强调模块化和包的支持。它拥有一个庞大的用户社区,对新开发者非常有帮助,可以解决疑问并为社区做出贡献。非程序员也喜欢Python,因为它易于理解、阅读和编写。Python常与其他编程语言如Java、JavaScript、Perl、Tcl、Smalltalk、C++、Common Lisp和Scheme相比较,是一种结合了现实世界限制(如成本、可用性和培训)的编程语言。Python易于学习和进化。

项目解释

在这个项目中,将学习如何将图像转换为素描图。这是一个非常有趣的学习过程。项目要求是使用Python编程语言和OpenCV。让开始吧。

所需库

要将普通图像/照片转换为铅笔素描图,需要导入以下库:

import cv2

代码解释

将使用OpenCV库中的几个函数来读取、显示和写入图像。以下是如何读取和写入图像的解释。

首先,使用imread()函数来读取图像,imshow()函数来显示图像,imwrite()函数将图像写入本地驱动器。以下是读取图像的默认语法。

有三种类型的标记如下:

cv2.imread("文件名",标记) cv2.imread("图像路径",-1) cv2.imread("图像路径",0) cv2.imread("图像路径",1)

例如:

img = cv2.imread("图像路径")

'imread'用于读取图像,提供了图像的路径。

将图像转换为灰度图

接下来,将图像转换为灰度图,以便获得黑白图像。

img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

cvtColor()函数将输入图像从一种颜色空间转换为另一种颜色空间。通过将其转换为灰度图,可以得到黑白图像。

img_invert = cv2.bitwise_not(img_gray)

bitwise_not()函数计算输入的逐元素位反转,这使得更亮的区域变得更暗,更暗的区域变得更亮,因此可以很容易地通过转换图像来创建素描图。

img_smoothing = cv2.GaussianBlur(img_invert,(21,21),sigmaX=0,sigmaY=0)

GaussianBlur()函数减少图像的噪声并平滑源图像,提供了卷积核和模糊度。有三种类型的模糊技术:平均模糊、高斯模糊、中值模糊和双边滤波。

平均模糊使用盒滤波器简单地取所有像素的平均值。这可以通过使用cv.blur()或cv.boxFilter()函数来完成。平均模糊的语法是cv.blur()。

高斯模糊是添加正的和奇数的标准差X和Y方向,分别对应SigmaX和SigmaY,它非常有效地从图像中去除噪声。

中值模糊:取内核区域下所有像素的中值作为中心元素,并用中值替换。

双边滤波:双边滤波在去除噪声的同时保持边缘不变,它不考虑相似像素的差异。

最终素描图

将使用dodgeV2()函数来创建最终的素描图。这个函数将灰度图像除以模糊图像的反转,保留最亮的边缘。这种技术通常被摄影师用来从胶片中打印。

def dodgeV2(x,y): return cv2.divide(x,255-y,scale=256) final_img = dodgeV2(img_gray,img_smoothing)

显示图像

将使用以下代码来显示原始图像、灰度图、反转图、平滑图和最终的素描图。

cv2.imshow('img',img) cv2.imshow("Gray Image",img_gray) cv2.imshow("Inverted Image",img_invert) cv2.imshow("Smooth Image",img_smoothing) cv2.imshow("Final Photo",final_img)

保存图像到本地驱动器

将使用以下代码将图像保存到本地驱动器。

cv2.imwrite("final_image.jpg",final_img) cv2.waitKey(0) cv2.destroyAllWindows()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485