python opencv通过按键采集图片源码


Posted in Python onMay 20, 2021

一、python版本

写了个python opencv的小demo,可以通过键盘按下字母s进行采集图像。

功能说明

“N” 新建文件夹 data/ 用来存储图像
“S” 开始采集图像,将采集到的图像放到 data/ 路径下
“Q” 退出窗口

python opencv源码

'''

“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()

效果图

python opencv通过按键采集图片源码

安装相关库

windows安装

pip install pillow

tx2/linux/…

sudo apt-get install python3-pillow

二、c语言版本

 c语言源码

/*****************************************************
2021.5.18:按键采集图像
******************************************************/
#include "opencv2/core/core.hpp"    
#include "opencv2/imgproc/imgproc.hpp"    
#include "opencv2/calib3d/calib3d.hpp"    
#include "opencv2/highgui/highgui.hpp"    
#include <iostream>    
#include <fstream>    

using namespace cv;
using namespace std;

#define SRC_WIDTH  1920
#define SRC_HEIGHT 1080

int main()
{
	//测试视频
	VideoCapture capture;
	capture.open(1);
	//capture.open("v4l2src device=/dev/video4 ! video/x-raw,width=1920,height=1020,framerate=30/1 ! videoconvert ! appsink");
	if (!capture.isOpened())
	{
		printf("文件打开失败");
	}
	capture.set(CAP_PROP_FRAME_WIDTH, SRC_WIDTH);        //设置宽度
	capture.set(CAP_PROP_FRAME_HEIGHT, SRC_HEIGHT);  //设置长度
	Mat frame;
	int n = 0;
	char* cstr = new char[120];
	while (true)
	{
		
		capture >> frame;
		if (frame.data == NULL)
		{
			printf("Image is empty\n");
			//writer.write(frame);
			break;
			//continue;
		}
		char kk=waitKey(2);
		if (kk == 'S' || kk == 's')
		{

			sprintf(cstr, "%s%d%s", "caliberation/", n++, ".jpg");
			imwrite(cstr, frame);
			printf("保存了图片\n");

		}

		
		namedWindow("111", 0);//参数为零,则可以自由拖动
		imshow("111", frame);
		waitKey(2);
	}

	return 0;

}

效果图

python opencv通过按键采集图片源码

到此这篇关于opencv通过按键采集图片源码的文章就介绍到这了,更多相关opencv按键采集图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Python pymongo模块常用操作分析
Sep 01 Python
Django异步任务之Celery的基本使用
Mar 23 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
python标记语句块使用方法总结
Aug 05 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
Python正则表达式如何匹配中文
May 27 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python 如何执行控制台命令与操作剪切板
教你怎么用Python生成九宫格照片
用 Python 元类的特性实现 ORM 框架
May 19 #Python
浅谈Python 中的复数问题
May 19 #Python
Python机器学习之基础概述
Python机器学习之PCA降维算法详解
Python 批量下载阴阳师网站壁纸
May 19 #Python
You might like
PHP生成带有雪花背景的验证码
2008/09/28 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
python实现聚类算法原理
2018/02/12 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
40岁生日感言
2014/02/15 职场文书
小学少先队活动方案
2014/02/18 职场文书
上课迟到检讨书
2014/02/19 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
安全先进班组材料
2014/12/26 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python