当前位置:首页 > 科技  > 软件

OpenCV 常用的七个示例:从读取到人脸检测(Python版)

来源: 责编: 时间:2023-11-30 09:28:18 324观看
导读OpenCVOpenCV是计算机视觉领域最流行的库之一。它最初是用 C 和 C++ 编写的。现在也可以在 Python 中使用。它最初是由英特尔开发的。该库是一个跨平台的开源库。免费使用。OpenCV 库是一个高度优化的库,其主要重点是

OpenCV

Lv428资讯网——每日最新资讯28at.com

OpenCV是计算机视觉领域最流行的库之一。它最初是用 C 和 C++ 编写的。现在也可以在 Python 中使用。它最初是由英特尔开发的。该库是一个跨平台的开源库。免费使用。OpenCV 库是一个高度优化的库,其主要重点是实时应用程序。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

OpenCV 库是2500多个优化算法的组合。它可以用来检测和识别不同的人脸,在图像中或实时识别物体,使用视频和网络摄像头分类不同的人类行为,跟踪摄像机的运动,跟踪像汽车、人类等移动物体,实时计数物体,将图像拼接在一起产生高分辨率图像,从图像数据库中找到类似的图像,从使用闪光灯拍摄的图像中去除红眼,提高图像质量,跟踪眼球运动,跟踪人脸等Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

它拥有大约4.7万活跃用户社区,估计下载量超过1800万次。许多大公司,如谷歌,亚马逊,特斯拉,微软,本田等使用OpenCV,使他们的产品更好,更智能。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

先决条件

Lv428资讯网——每日最新资讯28at.com

在开始编写代码之前,我们需要在我们的设备上安装 OpenCV 。如果你是专业的编程人员并且知道每一个 IDE,那么去 Pycharm 并且在设置中从它的包管理器中安装 OpenCV-python。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

如果您是初学者或中级程序员,或者只是想关注该博客,那么我们将使用代码编辑器而不是IDE。只需转到Visual Studio Code网站并根据您的操作系统下载最新版本即可。现在,我们将创建一个虚拟环境,在其中将安装 OpenCV。打开终端,然后使用cd定位到桌面。使用名为opencv的mkdir创建一个文件夹然后在以下命令中运行。Lv428资讯网——每日最新资讯28at.com

python -m venv env

现在使用 env/scripts/activate 命令激活环境,你会看到在 C:/Users/username/Desktop/opencv 前出现一个带小括号的 (env)。现在只需使用 pip 安装 OpenCV。Lv428资讯网——每日最新资讯28at.com

pip install opencv-python

我们将在这个博客中涵盖7个主题:Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

  • 读、写和展示一个图像
  • 读取视频与集成网络摄像头
  • 缩放和裁剪图像
  • 使用函数的基本图像滤波器
  • 绘制不同的形状
  • 在图像上写文字
  • 检测和裁剪人脸

1.读、写和展示一个图像

Lv428资讯网——每日最新资讯28at.com

为了使用 OpenCV 读取图像,我们使用函数 imread() ,为了显示图像,我们使用函数 imshow() ,为了写入图像,我们使用函数 imwrite()。让我们看看每一个的语法。Lv428资讯网——每日最新资讯28at.com

imread():Lv428资讯网——每日最新资讯28at.com

img = cv2.imread("PATH_TO_IMAGE.jpg/png")Exampleimg = imread("images/dog0.jpg")

imshow():Lv428资讯网——每日最新资讯28at.com

cv2.imshow("WINDOW NAME",IMG_VAR)Exampleimshow("Dog Image",img)

imwrite():Lv428资讯网——每日最新资讯28at.com

cv2.imwrite(FILENAME, IMAGE)filename: A string representing the file name. The filename must include image format like .jpg, .png, etc.image: It is the image that is to be saved.Examplecv2.imwrite('images/img',img)

.读取视频与集成网络摄像头

读取视频文件与读取 OpenCV 中的图像文件非常相似。不同之处在于我们使用 cv2.videocapture()Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

video = cv2.VideoCapture("FILEPATH.mp4")Examplevideo = cv2.VideoCapture("video/dog/dog.mp4")

视频是许多帧图像在一起的集合,每一帧都是一个图像。要使用 OpenCV 观看视频,我们只需要使用 while 循环显示视频的每一帧。Lv428资讯网——每日最新资讯28at.com

while True:   success , img = cap.read()   cv2.imshow("Video",img)   if cv2.waitKey(1) & 0xff==ord('q'):##key 'q' will break the loop       break

为了与网络摄像头集成,我们需要传递网络摄像头的端口值,而不是路径到视频。如果你使用的是笔记本电脑,没有连接任何外部摄像头,那么简单地传递0,如果你连接了任何外部摄像头,那么传递一个摄像头端口值。Lv428资讯网——每日最新资讯28at.com

cap = cv2.VideoCapture(0)cap.set(3,640)  ## Frame widthcap.set(4,480)  ## Frame Heightcap.set(10,100) ## Brightnesswhile True:   success, img = cap.read()   cv2.imshow("Video",img)   if cv2.waitKey(1) & 0xff == ord('q'):        break

3.缩放和裁剪图像

Lv428资讯网——每日最新资讯28at.com

(1) 缩放图像Lv428资讯网——每日最新资讯28at.com

缩放是一个改变图像形状的过程。在 Opencv,我们可以使用 resize 函数来调整图像的形状。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

cv2.resize(IMG,(WIDTH,HEIGHT))IMG: image which we want to resizeWIDTH: new width of the resize imageHEIGHT: new height of the resize imageExamplecv2.resize(img,(224,224))

要调整图像的大小,我们首先需要知道图像的形状。我们可以利用 shape 找到图像的形状,然后根据当前图像的形状,我们可以增大或减小图像的大小。让我们举个例子来看看。Lv428资讯网——每日最新资讯28at.com

import cv2img = cv2.imread("images/img0.jpg") ##Choose any imageprint(img.shape)imgResize = cv2.resize(img,(224,224)) ##Decrease sizeimgResize2 = cv2.resize(img,(1024,1024)) ##Increase sizecv2.imshow("Image",img)cv2.imshow("Image Resize",imgResize)cv2.imshow("Image Increase size",imgResize2)print(imgResize.shape)cv2.waitKey(0)

如果您不想把图像宽度和高度写死,您也可以根据现有的形状,然后根据比例改变图像的宽度和高度。Lv428资讯网——每日最新资讯28at.com

import cv2img = cv2.imread("images/img0.jpg") ##Choose any imageprint(img.shape)shape = img.shapeimgResize = cv2.resize(img,(shape[0]//2,shape[1]//2))##Decrease sizeimgResize2 = cv2.resize(img,(shape[0]*2,shape[1]*2)) ##Increase sizecv2.imshow("Image",img)cv2.imshow("Image Resize",imgResize)cv2.imshow("Image Increase size",imgResize2)print(imgResize.shape)cv2.waitKey(0)

Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

(2) 裁剪图像Lv428资讯网——每日最新资讯28at.com

裁剪是获取部分图像的过程。在  OpenCV 中,我们可以通过定义裁剪后的矩形坐标来执行裁剪。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

imgCropped = img[y1:y2, x1:x2](x1,y1): top-left vertex(x2,y2): bottom-right vertexExampleimgCropped = img[0:100,200:200]

使用裁剪方法,让我们尝试从图像中提取 Monalisa 的脸。Lv428资讯网——每日最新资讯28at.com

import cv2img = cv2.imread("images/img0.jpg")imgCropped = img[50:250,120:330]cv2.imshow("Image cropped",imgCropped)cv2.imshow("Image",img)cv2.waitKey(0)

Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

您还可以使用绘画模式来查找(x1,y1)、(x2,y2)的正确坐标。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

这里有个小任务:Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

  • 任务:右键单击图像并保存它; 尝试从图像中获取国王卡。
  • 提示:使用绘画模式找到正确的坐标,最后,使用调整大小,以增加裁剪图像的大小。

Lv428资讯网——每日最新资讯28at.com

4.使用函数的基本图像滤波器

Lv428资讯网——每日最新资讯28at.com

我们可以在图像上使用许多基本的滤波器,比如将图片转换成灰度、模糊等等。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

(1) 从 Img 到 grayLv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

为了将图像从彩色图像转换为灰度图像,我们可以使用函数 cv2.cvtColor,在这里我们传递 cv2.COLOR_BGR2GRAY 作为参数。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

imgGray = cv2.cvtColor(IMG,cv2.CODE)IMG: Original imageCODE: Conversion code for Gray(COLOR_BGR2GRAY)ExampleimgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

(2) 从 Img 到 HSVLv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

为了将图像转换为 HSV 颜色空间,我们可以使用函数 cv2.cvtColor,这里我们传递 cv2.COLOR_BGR2HSV 作为参数。它主要用于目标跟踪。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

imgGray = cv2.cvtColor(IMG,cv2.CODE)IMG: Original imageCODE: Conversion code for Gray(COLOR_BGR2HSV)ExampleimgHsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

(3) 模糊图像Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

模糊用于去除图像中的噪声,也称为平滑。它是对图像应用低通滤波器的过程。在 OpenCV 中对图像进行模糊,我们常用 GaussianBlur。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

imgBlur = cv2.GaussianBlur(img,(sigmaX,sigmaY),kernalSize)kernalsize − A Size object representing the size of the kernel.sigmaX − A variable representing the Gaussian kernel standard deviation in X direction.sigmaY - same as sigmaXExmapleimgBlur = cv2.GaussianBlur(img,(3,3),0)

(4) 边缘检测Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

在 OpenCV 中,我们使用 Canny算子来检测图像中的边缘。也有不同的边缘检测器,但最著名的是 Canny算子。Canny算子边缘检测是一种边缘检测算子,它使用多级算法来检测图像中的大范围边缘,是由 John F. Canny 在1986年提出的。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

imgCanny = cv2.Canny(img,threshold1,threshold2)threshold1,threshold2:Different values of threshold different for every imagesExampleimgCanny = cv2.Canny(img,100,150)

(5) 膨胀Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

膨胀被用来增加图像中边缘的大小。首先,我们定义了奇数(5,5)的核矩阵大小。然后使用内核,我们对图像执行膨胀。下面我们对 Canny 算子的输出图像进行了膨胀。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

kernel = np.ones((5,5),np.uint8) ## DEFINING KERNEL OF 5x5imgDialation = cv2.dilate(imgCanny,kernel,iterations=1) ##DIALATION

(6) 腐蚀Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

侵蚀与膨胀正好相反。该算法用于减小图像中边缘的大小。首先,我们定义了奇数(5,5)的核矩阵大小。然后使用内核,我们对图像执行腐蚀。下面我们对 Canny 算子的输出图像进行腐蚀处理。Lv428资讯网——每日最新资讯28at.com

kernel = np.ones((5,5),np.uint8) ## DEFINING KERNEL OF 5x5imgDialation = cv2.erode(imgCanny,kernel,iterations=1) ##EROSION

现在,在同一个程序中使用上述基本函数处理 Monalisa 图像。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

5.绘制不同的形状

我们可以使用 OpenCV 绘制不同的形状,像矩形,圆形,线等。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

(1) 长方形:Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

要在图像上绘制一个矩形,我们使用 cv2.rectangle 函数。在函数中,我们将宽度、高度、 x、 y、 RGB 中的颜色、深度作为参数传递。Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

cv2.rectangle(img,(w,h),(x,y),(R,G,B),THICKNESS)w: widthh: heightx: distance from x axisy: distance from y axisR,G,B: color in RGB form (255,255,0)THICKNESS: thickness of rectangel(integer)Examplecv2.rectangle(img,(100,300),(200,300),(255,0,255),2)

(2) 圆形:Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

为了绘制一个圆形,我们使用 cv2.circle 函数。我们传递 x,y,半径大小,RGB 颜色,深度作为参数。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

cv2.circle(img,(x,y),radius,(R,G,B),THICKNESS)x: distance from x axisy: distance from y axisradius: size of radius(integer)R,G,B: color in RGB form (255,255,0)THICKNESS: thickness of rectangel(integer)Examplecv2.circle(img,(200,130),90,(255,255,0),2)

(3) 直线:Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

要绘制一条直线,我们使用 cv2.line 函数传递起始点(x1,y1)、终点(x2,y2)、 RGB 格式的颜色、深度作为参数。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

cv2.line(img,(x1,y1),(x2,y2),(R,G,B),THICKNESS)x1,y1: start point of line (integer)x2,y2: end point of line (integer)R,G,B: color in RGB form (255,255,0)THICKNESS: thickness of rectangel(integer)Examplecv2.line(img,(110,260),(300,260),(0,255,0),3)

6.在图像上写文字

Lv428资讯网——每日最新资讯28at.com

在 OpenCV 中,我们有一个函数 cv2.puttext,用于在特定位置在图像上写入文本。它以图像、文本、 x、 y、颜色、字体、字号、粗细作为输入参数。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

语法:Lv428资讯网——每日最新资讯28at.com

cv2.putText(img,text,(x,y),FONT,FONT_SCALE,(R,G,B),THICKNESS)img: image to put text ontext: text to put on imageX: text distance from X axisY: text distance from Y axisFONT: Type of FONT (ALL FONT TYPES)FONT_SCALE: Scale of Font(Integer)R,G,B: color in RGB form (255,255,0)THICKNESS: thickness of rectangel(integer)Examplecv2.putText(img,"HELLO",(120,250),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)

Lv428资讯网——每日最新资讯28at.com

7.检测和裁剪人脸

Lv428资讯网——每日最新资讯28at.com

人脸检测在人脸识别系统中非常有用。在 OpenCV 中,我们有许多预先训练的 haar 级联分类器可用于不同的任务。以下网址可以查看 OpenCV GitHub 上的分类器列表:https://github.com/opencv/opencv/tree/master/data/haarcaLv428资讯网——每日最新资讯28at.com

scades。Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

Lv428资讯网——每日最新资讯28at.com

我们使用 haarcascade_frontalface_default.xml 分类器来检测图像中的人脸。它将返回图像的四个坐标(w,h,x,y)。使用这些坐标,我们要在脸上画一个矩形,然后使用相同的坐标,继续裁剪人脸。最后使用 imwrite,把裁剪后的图像保存到目录中。Lv428资讯网——每日最新资讯28at.com

import cv2# Load the cascadeface_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# Read the input imageimg = cv2.imread('images/img0.jpg')# Convert into grayscalegray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Detect facesfaces = face_cascade.detectMultiScale(gray, 1.3, 4)# Draw rectangle around the facesfor (x, y, w, h) in faces:    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)    # Cropping Face    crop_face = img[y:y + h, x:x + w]    #Saving Cropped Face    cv2.imwrite(str(w) + str(h) + '_faces.jpg', crop_face)cv2.imshow('img', img)cv2.imshow("imgcropped",crop_face)cv2.waitKey()

Lv428资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35292-0.htmlOpenCV 常用的七个示例:从读取到人脸检测(Python版)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: pring Boot 统一响应体处理器详解

下一篇: 图像搜索的新纪元:Milvus与CLIP模型相伴的搜图引擎

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
Top