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
    +关注

    关注

    33

    文章

    652

    浏览量

    45086
  • 树莓派
    +关注

    关注

    122

    文章

    2082

    浏览量

    110757
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征
    的头像 发表于 08-16 16:16 1562次阅读
    零成本钢铁侠手套!<b class='flag-5'>树莓</b>派+<b class='flag-5'>OpenCV</b> 秒变手势遥控器!

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征
    的头像 发表于 08-14 17:45 2397次阅读
    如何使用<b class='flag-5'>树莓</b>派与<b class='flag-5'>OpenCV</b>实现<b class='flag-5'>面部</b>和运动追踪的云台系统?

    如何使用树莓派+OpenCV实现姿态估计和面部特征点追踪?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征
    的头像 发表于 08-13 17:44 1465次阅读
    如何使用<b class='flag-5'>树莓</b>派+<b class='flag-5'>OpenCV</b>实现姿态估计和<b class='flag-5'>面部</b><b class='flag-5'>特征</b>点追踪?

    如何在树莓派上安装Ubuntu MATE ?

    ,而非GNOME。本文中,我将介绍如何轻松地树莓派上安装它。UbuntuMATE官方支持树莓派,因此每发布一个新版本,都会为
    的头像 发表于 08-12 18:56 3460次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>安装Ubuntu MATE ?

    树莓派上开启业余无线电之旅~

    树莓派和RTL-SDR或HackRF等硬件,你可以接收信号、追踪飞行器和船只、解码传输内容,甚至配备适当硬件获得许可的情况下进行发射。本指南将指导你如何为业余
    的头像 发表于 08-12 18:56 2204次阅读
    <b class='flag-5'>在</b><b class='flag-5'>树莓</b><b class='flag-5'>派上</b>开启业余无线电之旅~

    【GM-3568JHF开发板免费体验】OpenCV开发环境安装和计数程序开发

    、 Android 等系统上运行,通过Python接口简化操作。 sudo apt install libopencv-dev python3-opencv 四、OpenCV图像识别
    发表于 08-09 13:30

    这个套件让树莓派5运行几乎所有YOLO模型!Conda 与 Ultralytics!

    如何在树莓派上设置YOLO计算机视觉?Conda与Ultralytics本指南中,我们将学习如何使用Conda树莓
    的头像 发表于 07-31 11:51 5867次阅读
    这个套件让<b class='flag-5'>树莓</b>派5运行几乎所有YOLO模型!Conda 与 Ultralytics!

    树莓派 + OpenCV 打造人脸识别技术!

    本指南中,我们将教您如何使用OpenCV面部识别库(两个出色的开源项目)设置树莓派来检测和识别
    的头像 发表于 07-29 17:27 1561次阅读
    用<b class='flag-5'>树莓</b>派 + <b class='flag-5'>OpenCV</b> 打造人脸<b class='flag-5'>识别</b>技术!

    初学者指南:树莓派上搭建虚拟环境!

    在这篇简明扼要的指南中,我们将探讨如何在树莓派上设置和使用虚拟环境(或称为Venv)——包括终端和Thonny集成开发环境中。使用Bookworm操作系统或更高版本时,或在尝试安装Python
    的头像 发表于 07-27 13:24 1175次阅读
    初学者指南:<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>搭建虚拟环境!

    如何在树莓派上设置使用VNC?远程访问完整指南!

    为什么要在树莓派上使用VNC?使用VNC与树莓派的主要优势在于其提供的灵活性。我们可以“无头模式”(无物理显示器)下运行树莓派,同时仍能完
    的头像 发表于 07-26 20:42 6166次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>设置<b class='flag-5'>并</b>使用VNC?远程访问完整指南!

    C++ 与 Python:树莓派上哪种语言更优?

    Python是树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++物联网项目中同样广受欢迎且功能强大。那么,树莓派项目中选择哪
    的头像 发表于 07-24 15:32 1107次阅读
    C++ 与 Python:<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>哪种语言更优?

    释放潜力:树莓派上运行安卓系统实现多样化应用!

    为什么要在树莓派上运行安卓系统?安卓系统以其庞大的应用生态系统和用户友好的界面而闻名,它能够将树莓派转变为功能强大的设备,能够处理从媒体消费到轻量级计算和物联网应用等各种任务。优势高度定制化:
    的头像 发表于 07-05 08:33 1673次阅读
    释放潜力:<b class='flag-5'>在</b><b class='flag-5'>树莓</b><b class='flag-5'>派上</b>运行安卓系统实现多样化应用!

    如何在树莓派上安装运行 Arduino 集成开发环境!

    ,我们将介绍如何在树莓派上安装运行ArduinoIDE。所需物品要在树莓派上运行ArduinoIDE,你需要以下组件:配备适当电源的
    的头像 发表于 07-01 17:41 4571次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>安装<b class='flag-5'>并</b>运行 Arduino 集成开发环境!

    itop-3568开发板机器视觉opencv开发手册-图像绘制-画线

    本小节代码配套资料“iTOP-3568 开发板\\\\03_【iTOP-RK3568 开发板】指南教程 \\\\04_OpenCV 开发配套资料\\\\11”目录下,如下图所示: cv2.line
    发表于 06-04 10:38

    从初学到进阶:树莓派上最适合你的代码编辑器推荐!

    安装树莓派操作系统后,你就可以使用Python、Scratch、Java、C/C++等受Linux支持的多种编程语言进行编程了。其中,Python是树莓派上最受欢迎的编程语言。
    的头像 发表于 05-15 16:20 1403次阅读
    从初学到进阶:<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>最适合你的代码编辑器推荐!