OpenCV 车辆检测/人脸识别+图像拼接+文字识别
一、开发环境搭建
命令行安装方式 - mac
brew install python@3.9
pip3 install numpy matplotlib opencv_python// numpy - 矩阵操作// matplotlib - 显示// 测试是否安装成功(import 无报错信息 表示安装成功)
MacintoshdeMacBook-Pro:~ Jartin$ python3
Python 3.9.1 (default, Jan 8 2021, 17:15:36)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import matplotlib
>>> import cv2
二、图像 视频加载与展示
- API介绍
- namedWindow() 窗口标号
- imshow() 窗口展示
- destroyAllWindows() 销毁所有窗口
- resizeWindow 窗口大小
import cv2;# 创建窗口
cv2.namedWindow('new', cv2.WINDOW_NORMAL);
# WINDOW_AUTOSIZE 不可以resize
# WINDOW_NORMAL 可以resize# 设定窗口大小
cv2.resizeWindow('new', 1920, 1080)# 展示窗口
cv2.imshow('new', 0);# 键盘和鼠标的监听 实现
key = cv2.waitKey(0)
if(key == 'q'):exit()# 销毁所有窗口
cv2.destroyAllWindows();
import cv2;
# 图片加载
cv2.namedWindow('img', cv2.WINDOW_NORMAL);
img = cv2.imread('./jobs.jpeg');cv2.imshow('img', img)key = cv2.waitKey(0)
if (key & 0xFF == ord('q')):cv2.destroyAllWindows();
- 视频采集
- VideoCapure() 虚拟采集器
- cap.read() 将视频帧处理
- cap.release() 释放资源
import cv2;
# 使用opencv 的 videocapture采集视频数据
# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL);
cv2.resizeWindow('video', 640, 480);# 获取视频设备
cap = cv2.VideoCapture(0);while True:# 从摄像头读取视频帧ret, frame = cap.read();# 将视频帧在窗口中显示cv2.imshow('video', frame);# 等待键盘事件,如果q,退出 waitKey(1)帧率越小 视频越流畅key = cv2.waitKey(1);if (key & 0xFF == ord('q')):break;# 释放VideoCapturecap.release();cv2.destroyAllWindows();
import cv2;
# 读取视频文件
# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL);
cv2.resizeWindow('video', 640, 480);# 获取视频设备 / 从视频文件中读取视频帧
cap = cv2.VideoCapture(0);
cap = cv2.VideoCapture('/Users/Jartin/Desktop/opencv/zl.mp4');while True:# 从摄像头读取视频帧ret, frame = cap.read();# 将视频帧在窗口中显示cv2.imshow('video', frame);# 等待键盘事件 如果q退出key = cv2.waitKey(1);if (key & 0xFF == ord('q')):break;# 释放rediocapcap.release();cv2.destroyAllWindows();
import cv2;
# 视频录制
# 创建videowrite为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG');# 路径、 forcc、帧率、分辨率
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL);
cv2.resizeWindow('video', 640, 360);# 获取视频设备
cap = cv2.VideoCapture(0);while True:# 从摄像头读取数据ret, frame = cap.read();# 将视频帧在窗口显示cv2.imshow('video', frame);# 写数据到多媒体文件vw.write(frame);# 等待键盘事件 如果为q退出key = cv2.waitKey(1);if (key & 0xFF == ord('q')):break;# 释放videocapturecap.release();# 释放videowrite资源vw.release();cv2.destroyAllWindows();
import cv2;
import numpy as np;# 控制鼠标 鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):print(event, x, y, flags, userdata);# 创建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL);
cv2.resizeWindow('mouse', 640, 360);# 设置鼠标回调
cv2.setMouseCallback('mouse', mouse_callback, '123');# 显示窗口和背景
# numpy图片组件、np.zeros显示图片、(高, 宽, bgr3种数组)、np.uint8像素类型
img = np.zeros((360, 640, 3), np.uint8);
while True:cv2.imshow('mouse', img);key = cv2.waitKey(1);if key & 0xFF == ord('q'):break;cv2.destroyAllWindows();
- TrackBar 控件
- createTrackbar 创建TrackBar
- getTrackPos 获取TrackBar
import cv2;
import numpy as np;def callback():pass;# 创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL);# 创建trackbar 名字、窗口名字、默认当前值、最大值、回调方法
cv2.createTrackbar('R', 'trackbar', 0, 255, callback);
cv2.createTrackbar('G', 'trackbar', 0, 255, callback);
cv2.createTrackbar('B', 'trackbar', 0, 255, callback);# 创建图片
img = np.zeros((480, 640, 3), np.uint8);while True:# 读取值r = cv2.getTrackbarPos('R', 'trackbar');g = cv2.getTrackbarPos('G', 'trackbar');b = cv2.getTrackbarPos('B', 'trackbar');img[:] = [b, g, r];cv2.imshow('trackbar', img);key = cv2.waitKey(10);if key & 0xFF == ord('q'):break;cv2.destroyAllWindows();
- 色彩空间
- RGB与BGR
- RGB 人眼色彩空间
- OpenCV 默认使用BGR
- HSV/HSB/HSL 色相、饱和度、明亮度
- YUV 视频存储
import cv2;
import numpy as np;def callback():pass;# 创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL);# 创建trackbar 名字、窗口名字、默认当前值、最大值、回调方法
cv2.createTrackbar('R', 'trackbar', 0, 255, callback);
cv2.createTrackbar('G', 'trackbar', 0, 255, callback);
cv2.createTrackbar('B', 'trackbar', 0, 255, callback);# 创建图片
img = np.zeros((480, 640, 3), np.uint8);while True:# 读取值r = cv2.getTrackbarPos('R', 'trackbar');g = cv2.getTrackbarPos('G', 'trackbar');b = cv2.getTrackbarPos('B', 'trackbar');img[:] = [b, g, r];cv2.imshow('trackbar', img);key = cv2.waitKey(10);if key & 0xFF == ord('q'):break;cv2.destroyAllWindows();
HSV Hue:色相、红色、蓝色、绿色
Saturation:饱和度,颜色的纯度
Value:明度
YUV 视频中常用
对像素的描述 Y数据 UV彩色信息
- 色彩空间转换
import cv2;def callback():pass;cv2.namedWindow('color', cv2.WINDOW_NORMAL);img = cv2.imread('./jobs.jpeg');colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, cv2.COLOR_BGR2YUV];cv2.createTrackbar('curcolor', 'color', 0, 4, callback);while True:index = cv2.getTrackbarPos('curcolor', 'color');# 颜色空间转换APIcvt_img = cv2.cvtColor(img, colorspaces[index]);cv2.imshow('color', img)key = cv2.waitKey(10);if key & 0xFF == ord('q'):break;cv2.destroyAllWindows();
- Numpy 图像基础操作
- opencv中用到的矩阵都要转换成Numpy数组
- Numpy是一个经高度优化的Python数值库
- 基本操作
- 创建数组 array()
- 创建全0数组 zeros() / ones
- 创建全值数组 full()
- 创建单元数组 identity / eye()
import numpy as np# np.zeros((行的个数, 列的个数, 通道数/层数), 矩阵中的数据类型);
c = np.zeros((480, 640, 3), np.uint8);print(c)
矩阵的检索与赋值
ROI [y1:y2,x1:x2]
Mat是什么
是矩阵,可以理解为一张图 有head 与 body组成
- Mat的深拷贝与浅拷贝
import cv2
import numpy as npimg = cv2.imread('./1.jpeg');# 浅拷贝
img2 = img;# 深拷贝
img3 = img.copy();img[10:100, 10:100] = [0, 0, 255]cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)cv2.waitKey(0);
- 图像的多种属性
import cv2;
import numpy as numpyimg = cv2.imread('./1.jpeg')# (1200, 1920, 3) 高度、长度、通道数
print(img.shape)# 6912000 高度 * 长度 * 3
print(img.size)# uint8 图像中每个元素的位深
print(img.dtype)
- 通道的分离与合并
import cv2;
import numpy as np
# 通道的分离与合并img = np.zeros((480, 640, 3), np.uint8)b,g,r = cv2.split(img);b[10:100, 10:100] = 255;
g[10:100, 10:100] = 255;img2 = cv2.merge((b, g, r))cv2.imshow('img', img);
cv2.imshow('b', b);
cv2.imshow('g', g);
cv2.imshow('img2', img2);
cv2.waitKey(0);
三、绘制基本图形
- 线、矩形、圆
- 椭圆、多边形、绘制字体
import cv2;
import numpy as np;
# 绘制直线
img = cv2.imread('./1.jpeg')cv2.line(img, (10, 20), (10, 900), (0,0,255), 20, 4);
cv2.line(img, (100, 12), (400, 100), (0,0,255), 20, 14);cv2.imshow('img', img);key = cv2.waitKey(0);
import cv2;
import numpy as np;img = cv2.imread('./1.jpeg');# cv2.ellipse(img, (500, 500), )# 画圆
cv2.circle(img, (520, 440), 100, (0, 0, 255), 10)
cv2.circle(img, (520, 440), 5, (0, 0, 255), 10)# 画椭圆
# 度是按顺时针计算的
cv2.ellipse(img, (520, 440), (100, 50), 15, 0, 360, (0, 0, 255), -1)# 画多边形
pts = np.array(((320, 10), (150, 100), (450, 100)), np.int32)
cv2.polylines(img, [pts], True, (0, 0, 255))# 填充
cv2.fillPoly(img, [pts], (255, 255, 0))# 绘制文本
cv2.putText(img, 'Yulanlan', (800, 400), cv2.FONT_HERSHEY_PLAIN, 9, (255, 0, 0))cv2.imshow('draw', img);
cv2.waitKey(0)
四、车辆识别
- 基本图像运算处理
- 形态学
- 轮廓查找
- 图像运算
待续
OpenCV 车辆检测/人脸识别+图像拼接+文字识别相关推荐
- 人脸识别、文字识别背后的方法,以及研究的热点和难点
模式识别是什么? 作为人工智能的一个重要方向,模式识别的主要任务是模拟人的感知能力,如通过视觉和听觉信息去识别理解环境,又被称为"机器感知"或"智能感知". 人 ...
- Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比
Android 百度人脸识别.人脸采集.文字识别(身份证),人证对比 Android 拍照.图片压缩(兼容7.0) 由于公司的项目赶在 "某某打车" 事件期间,所以你懂得.老板说要 ...
- android tensorflow文字识别身份证识别ocr文字识别商用源码
一 ,文字识别简介 计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并 ...
- 通用票据识别/通用文字识别/通用表格识别/手写识别简述
经济日益繁荣,随之而来的是多如牛毛的合同.文件.表单和票据,尤其是一些大的企业集团,文件资料更是数不胜数,这些纸质资料十分占用空间,并且易丢失.易损坏,不宜传递和保存,如何有效的保存.处理和分享这些纸 ...
- 2019.07.31 科大讯飞语音生成+识别+朗读+文字识别
科大讯飞语音生成+识别+朗读+文字识别 现在我看小说用的是之前在知乎被安利的科大讯飞出品的"听书神器",各大应用商店都有下载. 内嵌百度搜索,按浏览器正常搜索书名进入网页后,点击右 ...
- c#批量文字识别,百度文字识别源码
文章目录 批量文字识别演示 下载地址 重要源码 一.一键识别按钮 二.后台工作 三.报告进度,完成任务 四.鼠标截图 五.文字识别 总结 批量文字识别演示 下载地址 https://download. ...
- OpenCV 2.4+ C++ SVM文字识别
转自:http://www.cnblogs.com/justany/archive/2012/11/27/2789767.html 预备知识 下面两个都不是必备知识,但是如果你想了解更多内容,可参考这 ...
- 安卓 图像清晰度识别_OCR文字识别的功能及注意事项
首先OCR文字识别是指电子设备检查纸上打印的字符,然后用OCR文字识别技术翻译成计算机文字的过程:就是对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程. 那么在日常生活中有很多 ...
- 中的图片文字识别_文字识别 图片转文字【小程序】
文字识别小程序在文章的底部 直接拉到文章底部就可使用 ↓↓↓↓↓↓ 大家在平时办公或者学习中经常会处理到图片转文字的问题,对于一些打字比较快的朋友来说并没有太大的问题,但是对于一些打字慢的人来说确实一 ...
最新文章
- 紫色回归线:雅虎中国的运筹学
- 淘宝精品案例JS、jQuery
- 【Java】6.5 抽象类
- php7抓取网页数据,php7-远程获取api接口或网页内容
- Linux系统灾难恢复技术和方法-[3]
- (转)双系统卸载Ubuntu
- 【全球AI人才排行榜】美国第一,中国仅排名第7
- HDU1166-敌兵布阵
- 小组会谈(2019.3.14)
- AI(2)---高通人工智能
- 如何在Python中打印异常?
- xmanager 远程连接REDHAT 4 桌面
- 计算机系统时间无法更改,电脑时间改不了,小编教你电脑无法修改系统时间如何解决...
- HDU3689 Infinite monkey theorem 无限猴子(字符串DP+KMP)
- 测试体质的软件有哪些,有哪些APP可以测体脂?测体脂率APP分享
- 360插件化踩坑记录(二),RePlugin安装、启动插件无反应
- 计算机系统期末考试感想
- c语言常用算法pdf,妙趣横生的算法(C语言实现 第2版) 带目录完整pdf[94MB]
- 一天进步一点点 LDAP协议和AD的概念
- BDYX 电话面试题目