一、开发环境搭建

命令行安装方式 - 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介绍
  1. namedWindow()             窗口标号
  2. imshow()                 窗口展示
  3. destroyAllWindows()     销毁所有窗口
  4. 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();
  • 视频采集
  1. VideoCapure()            虚拟采集器
  2. cap.read()                将视频帧处理
  3. 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 控件
  1. createTrackbar     创建TrackBar
  2. 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();
  • 色彩空间
  1. RGB与BGR
  2. RGB 人眼色彩空间
  3. OpenCV 默认使用BGR
  4. HSV/HSB/HSL 色相、饱和度、明亮度
  5. 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 图像基础操作
  1. opencv中用到的矩阵都要转换成Numpy数组
  2. Numpy是一个经高度优化的Python数值库
  • 基本操作
  1. 创建数组        array()
  2. 创建全0数组     zeros() / ones
  3. 创建全值数组     full()
  4. 创建单元数组     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 车辆检测/人脸识别+图像拼接+文字识别相关推荐

  1. 人脸识别、文字识别背后的方法,以及研究的热点和难点

    模式识别是什么? 作为人工智能的一个重要方向,模式识别的主要任务是模拟人的感知能力,如通过视觉和听觉信息去识别理解环境,又被称为"机器感知"或"智能感知". 人 ...

  2. Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比

    Android 百度人脸识别.人脸采集.文字识别(身份证),人证对比 Android 拍照.图片压缩(兼容7.0) 由于公司的项目赶在 "某某打车" 事件期间,所以你懂得.老板说要 ...

  3. android tensorflow文字识别身份证识别ocr文字识别商用源码

    一 ,文字识别简介 计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并 ...

  4. 通用票据识别/通用文字识别/通用表格识别/手写识别简述

    经济日益繁荣,随之而来的是多如牛毛的合同.文件.表单和票据,尤其是一些大的企业集团,文件资料更是数不胜数,这些纸质资料十分占用空间,并且易丢失.易损坏,不宜传递和保存,如何有效的保存.处理和分享这些纸 ...

  5. 2019.07.31 科大讯飞语音生成+识别+朗读+文字识别

    科大讯飞语音生成+识别+朗读+文字识别 现在我看小说用的是之前在知乎被安利的科大讯飞出品的"听书神器",各大应用商店都有下载. 内嵌百度搜索,按浏览器正常搜索书名进入网页后,点击右 ...

  6. c#批量文字识别,百度文字识别源码

    文章目录 批量文字识别演示 下载地址 重要源码 一.一键识别按钮 二.后台工作 三.报告进度,完成任务 四.鼠标截图 五.文字识别 总结 批量文字识别演示 下载地址 https://download. ...

  7. OpenCV 2.4+ C++ SVM文字识别

    转自:http://www.cnblogs.com/justany/archive/2012/11/27/2789767.html 预备知识 下面两个都不是必备知识,但是如果你想了解更多内容,可参考这 ...

  8. 安卓 图像清晰度识别_OCR文字识别的功能及注意事项

    首先OCR文字识别是指电子设备检查纸上打印的字符,然后用OCR文字识别技术翻译成计算机文字的过程:就是对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程. 那么在日常生活中有很多 ...

  9. 中的图片文字识别_文字识别 图片转文字【小程序】

    文字识别小程序在文章的底部 直接拉到文章底部就可使用 ↓↓↓↓↓↓ 大家在平时办公或者学习中经常会处理到图片转文字的问题,对于一些打字比较快的朋友来说并没有太大的问题,但是对于一些打字慢的人来说确实一 ...

最新文章

  1. 紫色回归线:雅虎中国的运筹学
  2. 淘宝精品案例JS、jQuery
  3. 【Java】6.5 抽象类
  4. php7抓取网页数据,php7-远程获取api接口或网页内容
  5. Linux系统灾难恢复技术和方法-[3]
  6. (转)双系统卸载Ubuntu
  7. 【全球AI人才排行榜】美国第一,中国仅排名第7
  8. HDU1166-敌兵布阵
  9. 小组会谈(2019.3.14)
  10. AI(2)---高通人工智能
  11. 如何在Python中打印异常?
  12. xmanager 远程连接REDHAT 4 桌面
  13. 计算机系统时间无法更改,电脑时间改不了,小编教你电脑无法修改系统时间如何解决...
  14. HDU3689 Infinite monkey theorem 无限猴子(字符串DP+KMP)
  15. 测试体质的软件有哪些,有哪些APP可以测体脂?测体脂率APP分享
  16. 360插件化踩坑记录(二),RePlugin安装、启动插件无反应
  17. 计算机系统期末考试感想
  18. c语言常用算法pdf,妙趣横生的算法(C语言实现 第2版) 带目录完整pdf[94MB]
  19. 一天进步一点点 LDAP协议和AD的概念
  20. BDYX 电话面试题目

热门文章

  1. keyframes介绍与调用动画方法
  2. 谷歌裸眼3D动物意外蹿红,掀起一股AR体验小高潮
  3. 【WEB基础】HTML CSS 基础入门(9)CSS盒子
  4. hbuilder 使用 ph 打印插件 实现 无线打印
  5. CentOS 8.2 搭建私有云 NextCloud
  6. Unity3D 网络游戏框架(一、网络基础)
  7. 1-Python介绍-判断和循环语句
  8. gRPC学习与应用(1)
  9. Unity软件灵活控制鼠标的隐藏与消失
  10. 信息技术学科知识是计算机,2018下全国教资统考初中信息技术学科知识与能力试题(科目三)答案...