0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样在树莓派上使用OpenCV绘制不同的几何形状并识别面部特征

454398 来源:工程师吴畏 2019-07-31 10:30 次阅读

Python代码绘制几何形状

下面的代码将在黑色图像上绘制线条,椭圆,圆形,矩形,折线和文字。复制此代码并执行它。我们将详细介绍代码如何在下面工作。

import cv2

import numpy as np

# Create a black image

img = np.zeros((512, 512, 3), np.uint8)

# img = cv2.line(image, (starting point), (Ending point), (color), line thickness)

img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)

# cv2.Ellipse(img, center, axes, angle, start_angle, end_angle, color, thickness=1)

img = cv2.ellipse(img,(256,256),(50,50),180,0,180,(255, 255, 0),-1)

img = cv2.ellipse(img,(256,256),(50,50),0,0,180,(0, 255, 0),-1)

# cv2.Circle(img, center, radius, color, thickness)

img = cv2.circle(img, (256, 256), 56, (0, 0, 255), 10)

# img = cv2.rectangle(image, (Top Left Corner), (Bottom Right Corner), (color), thickness)

img = cv2.rectangle(img, (189, 189), (323, 323), (0, 255, 0), 10)

# cv2.PolyLine(img, polys, is_closed, color, thickness=1)

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)

pts = pts.reshape((-1,1,2))

img = cv2.polylines(img,[pts],True,(0,255,255))

# cv2.PutText(img, text, org, fontFace, fontScale, color, thickness, line type)

font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img,‘OpenCV’,(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)

# Create the resizeable window

cv2.namedWindow(‘image’, cv2.WINDOW_NORMAL)

cv2.imshow(‘image’, img)

cv2.waitKey(0)

cv2.destroyAllWindows()

运行代码将打开此输出:

代码细分

首先,我们导入所需的软件包。 OpenCV包帮助我们绘制不同的几何形状,NumPy包允许我们创建一个空白图像并进行其他数学运算。

import cv2

import numpy as np

接下来,我们创建一个黑色图像,我们可以在其上绘制几何图形形状。

img = np.zeros((512, 512, 3), np.uint8)

然后我们使用 cv2.line() 函数绘制一条厚度为5像素的蓝色对角线。我们将在中心左侧到中间右侧的黑色图像上画一条蓝线。

cv2.line() 函数有五个参数

图像文件

起点(图像线上将开始的位置)

结束点

颜色的行

行的粗细

#img = cv2.line(image, (starting point), (Ending point), (color), line thickness)

img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)

现在,我们将在图像的中心绘制两个椭圆。要绘制椭圆,我们需要传递几个参数:

图像文件

中心位置(x,y)

主要和短轴长度

椭圆沿逆时针方向的旋转角度

开始和结束角度(起始和结束角度表示椭圆弧的起点和终点从长轴顺时针方向,即给出值0和360给出完整的椭圆)

椭圆的颜色

椭圆的厚度(-1表示它将填充形状)

#cv2.ellipse(img, center, axes, angle, start angle, end angle, color, thickness=1)

img = cv2.ellipse(img,(256,256),(50,50),180,0,180,(255, 255, 0),-1)

img = cv2.ellipse(img,(256,256),(50,50),0,0,180,(0, 255, 0),-1)

接下来,我们将在椭圆上绘制一个红色圆圈。要画一个圆,我们需要传递图像文件,中心坐标,圆的半径,(B,G,R)格式的颜色和圆的厚度。

#cv2.Circle(img, center, radius, color, thickness)

img = cv2.circle(img, (256, 256), 56, (0, 0, 255), 10)

之后,我们在圆圈上画一个绿色矩形。要绘制矩形,您需要矩形的左上角和右下角。

#img = cv2.rectangle(image, (Top Left Corner), (Bottom Right Corner), (color), thickness)

img = cv2.rectangle(img, (189, 189), (323, 323), (0, 255, 0), 10)

要绘制多边形,我们需要顶点的坐标。将这些点组成一个形状为ROWS x 1 x 2的数组,其中ROWS是顶点数,它应该是int32类型。

这里我们绘制一个带有四个黄色顶点的小多边形。

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)

pts = pts.reshape((-1,1,2))

# cv2.PolyLine(img, polys, is_closed, color, thickness=1)

img = cv2.polylines(img,[pts],True,(0,255,255))

要将文本放入图像中,我们需要提供想要写入的文本数据,我们想要放置它的位置坐标(即数据开始的左下角),字体类型,字体比例(指定字体大小),颜色,粗细和线型。

#cv2.PutText(img, text, org, fontFace, fontScale, color, thickness, line type)

font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img,‘OpenCV’,(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)

用于检测面部和在面上绘制圆形的Python代码

现在我们将编写将检测面部中的面部的代码图像并在脸部周围绘制圆圈。为了检测面部,我们将使用Haar级联分类器。 OpenCV已经包含许多面部,眼睛,微笑等预先训练的分类器。我们将要使用的分类器将检测面部。您可以获得级联文件。

将此文件保存在工作目录中作为“ haarcascade_frontalface_default.xml ”。

Python代码如下:

# Import OpenCV library

import cv2

# Load a cascade file for detecting faces

faceCascade = cv2.CascadeClassifier(“haarcascade_frontalface_default.xml”);

# Load image

image = cv2.imread(‘obamafamily.jpg’)

# Convert into grayscale

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Look for faces in the image using the loaded cascade file

faces = faceCascade.detectMultiScale(gray, 1.2, 5)

for (x,y,w,h) in faces:

# Create circle around faces

cv2.circle(image, (int((x + x + w)/2), int((y + y + h)/2)), int(h/2), (0, 255, 0), 5)

# Create the resizeable window

cv2.namedWindow(‘Obama’, cv2.WINDOW_NORMAL)

# Display the image

cv2.imshow(‘Obama’, image)

# Wait until we get a key

k=cv2.waitKey(0)

# If pressed key is ‘s’

if k == ord(‘s’):

# Save the image

cv2.imwrite(‘convertedimage.jpg’, image)

# Destroy all windows

cv2.destroyAllWindows()

# If pressed key is ESC

elif k == 27:

# Destroy all windows

cv2.destroyAllWindows(

运行代码后,程序会在图像中检测到的区域创建圆圈。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenCV
    +关注

    关注

    30

    文章

    628

    浏览量

    41277
  • 树莓派
    +关注

    关注

    116

    文章

    1699

    浏览量

    105544
收藏 人收藏

    评论

    相关推荐

    如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板

    功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。 OpenCV人脸检测方法 OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar
    发表于 11-15 17:58

    如何在树莓派上安装Docker容器

    Pi官网 下载最新版本的Raspberry Pi OS。 使用SD卡写入工具将镜像写入SD卡:可以使用 Etcher 等工具。 将SD卡插入树莓启动。 2. 更新系统 安装Docker之前
    的头像 发表于 11-11 11:38 311次阅读

    树莓派上部署YOLOv5进行动物目标检测的完整流程

    卓越的性能。本文将详细介绍如何在性能更强的计算机上训练YOLOv5模型,并将训练好的模型部署到树莓派4B上,通过树莓派的摄像头进行实时动物目标检测。 一、电脑上训练YOLOv5模型
    的头像 发表于 11-11 10:38 509次阅读
    <b class='flag-5'>在</b><b class='flag-5'>树莓</b><b class='flag-5'>派上</b>部署YOLOv5进行动物目标检测的完整流程

    树莓派gui开发用什么ide

    树莓派(Raspberry Pi)是一款功能强大的微型计算机,可以运行多种操作系统,如Raspbian、Ubuntu等。树莓派上进行GUI(图形用户界面)开发,可以使用多种集成开发环
    的头像 发表于 08-30 16:49 707次阅读

    OpenCV图像识别C++代码

    安装OpenCV库 首先,您需要在您的计算机上安装OpenCV库。您可以从OpenCV官网下载预编译的库或从源代码编译。安装完成后,确保将OpenCV的头文件和库文件添加到您的项目中。
    的头像 发表于 07-16 10:42 1836次阅读

    opencv图像识别有什么算法

    图像识别算法: 边缘检测 :边缘检测是图像识别中的基本步骤之一,用于识别图像中的边缘。常见的边缘检测算法有Canny边缘检测器、Sobel边缘检测器和Laplacian边缘检测器。 特征
    的头像 发表于 07-16 10:40 879次阅读

    opencv-python和opencv一样吗

    -Python是OpenCV的一个Python语言接口,它允许开发者使用Python语言来调用OpenCV库的功能。 虽然OpenCVOpenCV-Python
    的头像 发表于 07-16 10:38 1028次阅读

    opencv的主要功能有哪些

    OpenCV提供了丰富的图像处理功能,包括图像的读取、显示、保存、转换等。此外,OpenCV还支持图像的滤波、边缘检测、形态学操作、图像金字塔等高级图像处理技术。 特征检测与描述:OpenC
    的头像 发表于 07-16 10:35 1372次阅读

    基于OpenCV的人脸识别系统设计

    基于OpenCV的人脸识别系统是一个复杂但功能强大的系统,广泛应用于安全监控、人机交互、智能家居等多个领域。下面将详细介绍基于OpenCV的人脸识别系统的基本原理、实现步骤,
    的头像 发表于 07-11 15:37 1.2w次阅读

    神经网络图像识别中的应用

    随着人工智能技术的飞速发展,神经网络图像识别领域的应用日益广泛。神经网络以其强大的特征提取和分类能力,为图像识别带来了革命性的进步。本文将详细介绍神经网络
    的头像 发表于 07-01 14:19 623次阅读

    使用OpenCV进行仪表指针刻度的识别与读取

    首先说一下模板匹配,它是OpenCV自带的一个算法,可以根据一个模板图到目标图上去寻找对应位置,如果模板找的比较好那么效果显著,这里说一下寻找模板的技巧,模板一定要标准、精准且特征明显。
    发表于 02-22 13:54 1806次阅读
    使用<b class='flag-5'>OpenCV</b>进行仪表指针刻度的<b class='flag-5'>识别</b>与读取

    秒懂鸿蒙OS 生物特征识别

    鸿蒙OS 生物特征识别概述 提供生物特征识别认证能力,即基于人体固有的生理特征和行为特征
    的头像 发表于 01-29 16:26 3639次阅读

    全志H616核桃派上实现USB摄像头的OpenCV颜色检测

    在给核桃派开发板用OpenCV读取图像显示到pyqt5的窗口上加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。颜色检测核心api按照惯例,先要介绍一下opencv
    发表于 01-22 10:10

    核桃派上实现USB摄像头的OpenCV颜色检测

    在前几周的文章中已经介绍过如何在核桃派上OpenCV读取图像显示到pyqt5的窗口上,这里在上一篇文章的基础上,给开发板加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。
    的头像 发表于 01-20 17:50 898次阅读
    <b class='flag-5'>在</b>核桃<b class='flag-5'>派上</b>实现USB摄像头的<b class='flag-5'>OpenCV</b>颜色检测

    几何量公差与检测基本原理及测量仪器

    三本精密仪器小编获悉,现代科技的发展中,几何量测量已经成为许多工程领域不可或缺的一部分。通过准确测量物体的形状、尺寸等几何属性,可以为产品设计、机械加工、工程测量等提供重要的依据。如
    的头像 发表于 12-20 15:48 644次阅读
    <b class='flag-5'>几何</b>量公差与检测基本原理及测量仪器