'''
“N” 新建文件夹 data/ 用来存储图像
"S" 开始采集图像,将采集到的图像放到 data/ 路径下
“Q” 退出窗口
'''
import numpy as np # 数据处理的库 Numpy
import cv2 # 图像处理的库 OpenCv
import os # 读写文件
import shutil # 读写文件
from PIL import Image, ImageDraw, ImageFont
# # OpenCv 调用摄像头 / Use camera
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
'''
#功能函数,只是用来往图片中显示汉字
#示例 img = cv2ImgAddText(cv2.imread('img1.jpg'), "大家好,我是片天边的云彩", 10, 65, (0, 0, 139), 20)
参数说明:
img:OpenCV图片格式的图片
text:要写入的汉字
left:字符坐标x值
top:字符坐标y值
textColor:字体颜色
:textSize:字体大小
'''
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
if (isinstance(img, np.ndarray)): # 判断是否OpenCV图片类型
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img)
# 字体的格式
fontStyle = ImageFont.truetype(
"font/simsun.ttc", textSize, encoding="utf-8")
# 绘制文本
draw.text((left, top), text, textColor, font=fontStyle)
# 转换回OpenCV格式
return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
# 存储图像的文件夹
current_dir = ""
# 保存 图像 的路径
path_photos_from_camera = "data/"
press_n_flag = 0
cnt_ss=0
while cap.isOpened():
flag, img_rd = cap.read()
#print(img_rd.shape)
kk = cv2.waitKey(2)
# 待会要写的字体 / Font to write
font = cv2.FONT_ITALIC
# 4. 按下 'n' 新建存储人脸的文件夹 / press 'n' to create the folders for saving faces
if kk == ord('N') or kk == ord('n'):
current_dir = path_photos_from_camera
#os.makedirs(current_dir)
if os.path.isdir(current_dir):
pass
else:
os.mkdir(current_dir)
print('\n')
print("新建的保存图像的文件夹 / Create folders: ", current_dir)
press_n_flag = 1 # 已经按下 'n' / have pressed 'n'
# 5. 按下 's' 保存摄像头中的图像到本地 / Press 's' to save image into local images
if kk == ord('S') or kk == ord('s'):
# 检查有没有先按'n'新建文件夹 / check if you have pressed 'n'
if press_n_flag:
cnt_ss += 1
cv2.imwrite(current_dir + "/img_" + str(cnt_ss) + ".jpg", img_rd)
print("写入本地 / Save into:", str(current_dir) + "/img_face_" + str(cnt_ss) + ".jpg")
else:
print("请在按 'S' 之前先按 'N' 来建文件夹 / Please press 'N' before 'S'")
# 添加说明 / Add some statements
#cv2.putText(img_rd, "Face Register", (20, 40), font, 1, (0, 255, 0), 1, cv2.LINE_AA)
img_rd = cv2ImgAddText(img_rd, "图片采集系统", 160, 25, (0, 255,0), 30)
#cv2.putText(img_rd, "N: Create face folder", (20, 350), font, 0.8, (0, 255, 0), 1, cv2.LINE_AA)
img_rd = cv2ImgAddText(img_rd, "N: 创建保存图像文件夹", 20, 350, (0, 255, 0), 20)
#cv2.putText(img_rd, "S: Save current face", (20, 400), font, 0.8, (0, 255, 0), 1, cv2.LINE_AA)
img_rd = cv2ImgAddText(img_rd, "S: 保存当前图片", 20, 400, (0, 255, 0), 20)
#cv2.putText(img_rd, "Q: Quit", (20, 450), font, 0.8, (0, 0, 0), 1, cv2.LINE_AA)
img_rd = cv2ImgAddText(img_rd, "Q: 退出", 20, 450, (0, 255, 0), 20)
# 6. 按下 'Q' 键退出 / Press 'q' to exit
if kk == ord('Q') or kk == ord('q'):
break
# 如果需要摄像头窗口大小可调 / Uncomment this line if you want the camera window is resizeable
cv2.namedWindow("camera", 0)
cv2.imshow("camera", img_rd)
# 释放摄像头 / Release camera and destroy all windows
cap.release()
cv2.destroyAllWindows()
到此这篇关于opencv通过按键采集图片源码的文章就介绍到这了,更多相关opencv按键采集图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!