首页 / 行业
怎样在树莓派上使用OpenCV绘制不同的几何形状并识别面部特征
2019-07-31 10:30:00
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.webp’)
# 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.webp’, image)
# Destroy all windows
cv2.destroyAllWindows()
# If pressed key is ESC
elif k == 27:
# Destroy all windows
cv2.destroyAllWindows(
运行代码后,程序会在图像中检测到的区域创建圆圈。
最新内容
手机 |
相关内容
AI换脸换声太逼真!遇到AI视频诈骗如
AI换脸换声太逼真!遇到AI视频诈骗如何识别?,活动,社交媒体,确认,账户,验证,真实照片,随着DCP010505BP-U人工智能技术的不断发展,AI换脸豪威发布新款 4K 分辨率图像传感器
豪威发布新款 4K 分辨率图像传感器,适用于安防摄像头,分辨率,新款,区域,像素,运行,图像,豪威科技最近发布了一款全新的4K分辨率BAS70安森美宣布其Hyperlux 图像传感器
安森美宣布其Hyperlux 图像传感器系列已集成到瑞萨R-Car V4x平台,平台,到瑞,集成,图像,汽车制造商,辅助功能,安森美(ON Semiconducto高精度3D视觉技术,助力工业机器人实
高精度3D视觉技术,助力工业机器人实现汽车零部件高效上下料,工业机器人,助力,视觉,高精度,3D,算法,高精度3D视觉技术在工业机器人上接近+触摸+按压:AI技术赋能,这个三合
接近+触摸+按压:AI技术赋能,这个三合一人机交互方案,太酷了!,方案,人机交互,三合,按压,智能,识别,近年来,随着人工智能(AI)技术的迅猛发展,MediaTek 发布天玑 9300 旗舰 5G
MediaTek 发布天玑 9300 旗舰 5G 生成式 AI 移动芯片,开启全大核计算,旗舰,芯片,生成式,5G,支持,移动设备,MediaTek 是一家全球领先什么是硅光电三极管,硅光电三极管的
什么是硅光电三极管,硅光电三极管的基本结构、优缺点、工作原理、应用、识别方法、检测、如何选用及发展历程,三极管,识别,工作原理嵌入式视觉技术如何赋予机器观察能
嵌入式视觉技术如何赋予机器观察能力,能力,视觉,嵌入式,跟踪,特征,计算,嵌入式视觉技术是一种将人的视觉能力赋予机器的技术。通过