import sys
import cv2
import os
# dlib是一个机器学习的开源库,包含了机器学习的很多算法,使用起来很方便。也提供了一些python接口。
import dlib
source_path = './input_img'
faces_other_path = 'other_faces'
size = 64
if not os.path.exists(faces_other_path):
os.makedirs(faces_other_path)
"""特征提取器:dlib自带的frontal_face_detector"""
detector = dlib.get_frontal_face_detector()
"""os,walk()会返回一个生成器,每次迭代都会返回一个元组,元组返回三个元素,分别是当前目
录(path),当前目录的子目录(dirnames),当前目录的文件(filenames). """
num = 1
for (path, dirnames, filenames) in os.walk(source_path):
for filename in filenames:
if filename.endswith('.jpg'): # 用endswith判断一个文件名是不是以jpg
print('Being processed picture %s' % num)
img_path = path+'/'+filename
img = cv2.imread(img_path) # 读图片
# 转为灰度图片
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
""" 使用detector进行人脸检测 dets为返回的结果"""
dets = detector(gray_img, 1) # 1采样次数
"""--------------------------------------------------------------------
使用enumerate 函数遍历序列中的元素以及它们的下标,i为人脸序号,d为i对应的元素;
left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离
top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离
----------------------------------------------------------------------"""
for i, d in enumerate(dets):
x1 = d.top() if d.top() > 0 else 0
y1 = d.bottom() if d.bottom() > 0 else 0
x2 = d.left() if d.left() > 0 else 0
y2 = d.right() if d.right() > 0 else 0
face = img[x1:y1,x2:y2]
face = cv2.resize(face, (size,size)) # 调整图片的尺寸
cv2.imshow('image',face)
cv2.imwrite(faces_other_path+'/'+str(num)+'.jpg', face) # 保存
num += 1
# waitKey() 函数的功能是不断刷新图像 , 频率时间为delay , 单位为ms,该函数通常用在显示图像函数之后。
"""参数:delay延时时间,单位ms;
delay>0时,延迟"delay"ms;
当delay<=0的时,如果没有键盘触发,则一直等待"""
key = cv2.waitKey(30)
if key == 27:
sys.exit(0)
为什么我最后的图片没有保存在我的指定目录里面
你需要检查你的图片保存路径和文件名是否正确。在你的代码中,你的图片保存路径是 other_faces
,这意味着在运行脚本的当前目录下,应该有一个名为 other_faces
的文件夹。如果没有,请确保你已经创建了这个文件夹。然后,请确保文件名是正确的,即保存的文件名应该是数字加上 .jpg 后缀,例如 1.jpg,2.jpg 等,可以使用print语句来检查你的文件名是否正确。如果你的代码在显示图片后无法保存图片,那么你需要检查你的Python工作目录是否有写入权限。为了解决这个问题,可以改变图片保存路径到你能够访问并有写入权限的目录,比如 ./output_img/other_faces
或者 /tmp/other_faces
(根据你自己环境的情况改变)。
分离轴的设计方式有很多,XY + θ, X+Y θ, X θ+Y….,具体状况具体分析,目的是要找到旋转中心,做好9点标定。
1.相机非线性校正
2.相机与机器人做9点标定
3.计算机器人的旋转中心
4.相机通过公式计算得出最终的输出结果
旋转中心方法用于所有机器人与视觉配合场景
方法:计算工件实际发生的偏移量和旋转量,结合机器人的旋转中心进行二次补偿后,把补偿量
发送给机器人,然后机器人把补偿量补偿后进行抓取或放置即可;
计算某个点绕另外一点旋转一定角度后的坐标,如图:
机器人与视觉标定理论详解
A(x,y)绕B(rx0,ry0)旋转a度后的位置为C(x0,y0),则有如下关系式:
x0= cos (a) * (x-rx0) – sin (a) * (y-ry0) +rx0
y0= cos (a) * (y-ry0) + sin (a) * (x-rx0) +ry0