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线程池的实现实例
Nov 18 Python
python重试装饰器示例
Feb 11 Python
Python程序设计入门(5)类的使用简介
Jun 16 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 Python
pandas中pd.groupby()的用法详解
Jun 16 Python
python 如何执行控制台命令与操作剪切板
教你怎么用Python生成九宫格照片
用 Python 元类的特性实现 ORM 框架
May 19 #Python
浅谈Python 中的复数问题
May 19 #Python
Python机器学习之基础概述
Python机器学习之PCA降维算法详解
Python 批量下载阴阳师网站壁纸
May 19 #Python
You might like
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
财务副总经理工作职责
2013/11/25 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
会计岗位职责范本
2014/03/07 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
小学中队活动总结
2015/05/11 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android