ToB企服应用市场:ToB评测及商务社交产业平台

标题: (01)python-opencv基础知识入门(图片的读取与视频打开) [打印本页]

作者: 小小小幸运    时间: 2024-10-10 11:47
标题: (01)python-opencv基础知识入门(图片的读取与视频打开)
前言
一、图像入门
1.1 读取图像cv.imread()
1.2 数组数据转换cv.cvtColor() 
1.3数据窗口展示
1.4图像保存
1.5图像的截取
 1.6 图像的比例缩放
二、视频入门
参考文献

前言

OpenCV 于 1999 年由 Gary Bradsky 在英特尔建立,第一个版本于 2000 年问世。Vadim Pisarevsky 加入了 Gary Bradsky,负责管理英特尔的俄罗斯软件 OpenCV 团队。2005 年,OpenCV 被用于 Stanley ,这辆车赢得了 2005 年美国穿越沙漠 DARPA 呆板人挑衅大赛。厥后,在 Willow Garage 的支持下,在 Gary Bradsky 和 Vadim Pisarevsky 主导下,OpenCV 项目的开发工作变得活跃起来。OpenCV 现在支持与盘算机视觉和呆板学习相关的众多算法,并且天天都在拓展中。
OpenCV 支持各种编程语言,如 C++,Python,Java 等,可在不同的平台上利用,包括 Windows,Linux,OS X,Android 和 iOS。基于 CUDA 和 OpenCL 的高速 GPU 操纵接口也在积极开发中。OpenCV-Python 是 OpenCV 的 Python API,结合了 OpenCV C++ API 和 Python 语言的最佳特性。
OpenCV-Python 是一个 Python 绑定库,旨在解决盘算机视觉标题。
Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,重要是由于它的简朴性和代码可读性。它使步伐员能够用更少的代码表达思想,而不会降低可读性。
与 C/C++ 这类语言相比,Python 的速率更慢。好在,可以利用 C/C++ 轻松的拓展 Python ,我们可以在 C/C++ 中编写盘算麋集型代码,并用 Python 来封装。这给我们带来了两个利益:首先,代码像原始的 C/C++ 代码一样快(由于后台实际上就是 C/C++ 代码在工作),其次,在 Python 中编写代码比在 C/C++ 中更轻易。OpenCV-Python 就是 OpenCV C++ 的 Python 封装。
OpenCV-Python 利用了 Numpy,这是一个有着 MATLAB 风格语法,高度优化的用于数值盘算的库。所有 OpenCV 数组布局都与 Numpy 数组举行转换。这也使得与利用 Numpy 的其他库(如 SciPy 和 Matplotlib)集成更轻易。
一、图像入门

        都知道一张图片是由许多个像素点组成,对于盘算机而言,最终出现在用户面前的是由每个像素点的值所决定(0~255),0对应黑色,255对应白色。我们在生活中通常接触的都是彩色图片,由RGB三通道共同构成一张上面的彩色图片,每一个通道对应的像素值反映出其亮度(三个通道可以理解成三个矩阵)。而灰度图像通常只有一个颜色通道来表现。

1.1 读取图像cv.imread()

利用 cv.imread() 函数读取一张图像,图片应该在工作目次中,大概应该提供完整的图像路径。
第二个参数是一个 flag,指定了应该读取图像的方式

Note

读取图片的代码如下所示:
  1. import numpy as np
  2. import cv2 as cv
  3. # 用灰度模式加载图像
  4. img = cv.imread('images/demo2.png', 0)
  5. cv.imshow('image', img)
  6. cv.waitKey(0)
  7. cv.destroyAllWindows()
复制代码
 
1.2 数组数据转换cv.cvtColor() 

  1. import numpy as np
  2. import cv2 as cv
  3. # 用灰度模式加载图像
  4. img_BGR = cv.imread('images/demo2.png')
  5. img = cv.cvtColor(img_BGR,cv.COLOR_BGR2GRAY)  #将其转换为灰度的二维数组数据
  6. cv.imshow('image', img)
  7. cv.waitKey(0)
  8. cv.destroyAllWindows()
复制代码
1.3数据窗口展示

  1. img = cv2.imread("cat.jpg")
  2. cv2.imshow("IMage",img)
  3. cv2.waitKey(0)          # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口
  4. cv2.destroyAllWindows()
复制代码
1.4图像保存

  1. cv2.imwrite("mycat.jpg",img)
复制代码
1.5图像的截取

  1. # 其实本质就是对np数组进行操作
  2. img = cv2.imread("cat.jpg")
  3. cv2.imshow("IMage",img[:100,:200])  # 取前100行,前200列的像素作为图像展示
复制代码
 1.6 图像的比例缩放

  1. img_cat = cv2.imread("cat.jpg")
  2. ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #横向拉长三倍
  3. ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #图片扩大三倍
复制代码
二、视频入门


通常,我们用相机捕捉直播。OpenCV 为此提供了一个非常简朴的接口。我们用相机捕捉一个视频(我用的电脑内置摄像头),将它转换成灰度视频并显示。仅仅是一个简朴的开始。去获取一个视频,你需要创建一个VideoCapture对象。它的参数可以是装备索引大概一个视频文件名。装备索引仅仅是摄像机编号。通常会连接一台摄像机(as in my case)。所以我只传了 0(大概-1)。你可以通过传 1 来选择第二个摄像机,以此类推。之后,你能逐帧捕捉。但是最后,不要忘记释放这个 Capture 对象。
  1. import numpy as np
  2. import cv2 as cv
  3. cap = cv.VideoCapture(0)
  4. while(True):
  5.     # 一帧一帧捕捉
  6.     ret, frame = cap.read()
  7.     # 我们对帧的操作在这里
  8.     gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
  9.     # 显示返回的每帧
  10.     cv.imshow('frame',gray)
  11.     if cv.waitKey(1) & 0xFF == ord('q'):
  12.         break
  13. # 当所有事完成,释放 VideoCapture 对象
  14. cap.release()
  15. cv.destroyAllWindows()
复制代码
Note

保存视频
我们捕捉视频,逐帧处置惩罚然后保存下来。对于图像来说,是非常的简朴,就用 cv.imwrite()。这里需要做更多的工作。
这次我们创建一个 VideoWriter 对象。我们应该指定输出文件的名字 (例如:output.avi)。然后我们应该指定 FourCC 码 (下一段有先容)。然后应该通报每秒帧数和帧巨细。最后一个是 isColor flag。假如是 True,编码器盼望彩色帧,否则它实用于灰度帧。
FourCC 是用于指定视频解码器的 4 字节代码。这里 fourcc.org 是可用编码的列表。它取决于平台,下面编码就很好。

对于 MJPG, FourCC 的代码作为 cv.VideoWriter_fourcc(‘M’,’J’,’P’,’G’) 或 cv.VideoWriter_fourcc(*’MJPG’) 通报。
下面的代码从相机捕捉,在垂直方向翻转每一帧然后保存它。
  1. import numpy as np
  2. import cv2 as cv
  3. cap = cv.VideoCapture(0)
  4. # 声明编码器和创建 VideoWrite 对象
  5. fourcc = cv.VideoWriter_fourcc(*'XVID')
  6. out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
  7. while(cap.isOpened()):
  8.     ret, frame = cap.read()
  9.     if ret==True:
  10.         frame = cv.flip(frame,1)
  11.         # 写入已经翻转好的帧
  12.         out.write(frame)
  13.         cv.imshow('frame',frame)
  14.         if cv.waitKey(1) & 0xFF == ord('q'):
  15.             break
  16.     else:
  17.         break
  18. # 释放已经完成的工作
  19. cap.release()
  20. out.release()
  21. cv.destroyAllWindows()
复制代码
参考文献

1. 简介 - OpenCV-Python 教程简介 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack
opencv——基础篇 - 小可爱真是太好了 - 博客园

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4