OpenCV图像处理

文章目录

  • OpenCV图像处理
  • 一、图像入门
    • 1.读取图像
    • 2.显示图像
    • 3.保存图像
  • 二、视频入门
    • 1.用相机捕捉视频
    • 2.播放视频文件
    • 3.保存视频
  • 总结

一、图像入门

1.读取图像

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

cv.IMREAD_COLOR:加载彩色图像,任何图像的透明度都会被忽略,它是默认标志
cv.IMREAD_GRAYSCALE:以灰度模式加载图像
cv.IMREAD_UNCHANGED:加载图像,包括 alpha 通道
Note

你可以简单地分别传递整数 1、0 或-1,而不是这三个 flag。

import numpy as np
import cv2 as cv
# 用灰度模式加载图像
img = cv.imread('messi5.jpg', 0)

即使图像路径错误,它也不会抛出任何错误,但是打印 img会给你None

2.显示图像

用 cv.imshow() 函数在窗口中显示图像,窗口自动适应图像的大小。

第一个参数是窗口名,它是一个字符串,第二个参数就是我们的图像。你可以根据需要创建任意数量的窗口,但是窗口名字要不同。

cv.imshow('image', img)
cv.waitKey(0)  #毫秒级显示,如果是0就是按下任意按键结束显示
cv.destroyAllWindows()

cv.waitKey() 是一个键盘绑定函数,它的参数是以毫秒为单位的时间。该函数为任意键盘事件等待指定毫秒。如果你在这段时间内按下任意键,程序将继续。如果传的是 0,它会一直等待键盘按下。
cv.destroyAllWindows() 简单的销毁我们创建的所有窗口。如果你想销毁任意指定窗口,应该使用函数 cv.destroyWindow() 参数是确切的窗口名。

import numpy as np
import cv2 as cv
# 用RGB模式加载图像
img = cv.imread('1.png', 1)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()


也可以同时显示两张图像

有一种特殊情况,你可以先创建一个窗口然后加载图像到该窗口。在这种情况下,你能指定窗口是否可调整大小。它是由这个函数完成的 cv.namedWindow()。默认情况下,flag 是 cv.WINDOW_AUTOSIZE。但如果你指定了 flag 为 cv.WINDOW_NORMAL,你能调整窗口大小。当图像尺寸太大,在窗口中添加跟踪条是很有用的。

import numpy as np
import cv2 as cv
# 用RGB模式加载图像
img = cv.imread('1.png', 1)
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()


可以看到图片可以拉伸,也可以自己去对比一下效果。

3.保存图像

保存图像,用这个函数 cv.imwrite()

第一个参数是文件名,第二个参数是你要保存的图像。

import numpy as np
import cv2 as cv
# 用RGB模式加载图像
img = cv.imread('1.png', 1)
cv.imwrite('11.png',img)  #将1.png保存为11.png
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()


图像小结
下面的程序以灰度模式读取图像,显示图像,如果你按下 's‘ 会保存和退出图像,或者按下 ESC 退出不保存。

import numpy as np
import cv2 as cvimg = cv.imread('11.png',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # ESC 退出cv.destroyAllWindows()
elif k == ord('s'): # 's' 保存退出cv.imwrite('m.png',img)cv.destroyAllWindows()

二、视频入门

1.用相机捕捉视频

通常,我们用相机捕捉直播。OpenCV 为此提供了一个非常简单的接口。我们用相机捕捉一个视频(我用的电脑内置摄像头),将它转换成灰度视频并显示。去获取一个视频,你需要创建一个VideoCapture对象。它的参数可以是设备索引或者一个视频文件名。设备索引仅仅是摄像机编号。通常会连接一台摄像机(as in my case)。所以我只传了 0(或者-1)。你可以通过传 1 来选择第二个摄像机,以此类推。之后,你能逐帧捕获。但是最后,不要忘记释放这个 Capture 对象。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):# 一帧一帧捕捉ret, frame = cap.read()# 我们对帧的操作在这里gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)  # cv.COLOR_BGR2RG显示彩色图像# 显示返回的每帧cv.imshow('frame',gray)if cv.waitKey(1) & 0xFF == ord('q'):break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv.destroyAllWindows()

cap.read() 返回一个 bool 值(True/False)。如果加载成功,它会返回True。因此,你可以通过这个返回值判断视频是否结束。

2.播放视频文件

它和从相机捕获一样,只需要用视频文件名更改相机索引。同时显示 frame,为 cv.waitKey() 使用合适的时间。如果它太小,视频将非常快,如果太大,视频将很慢 (嗯,这就是如何显示慢动作)。正常情况下,25 毫秒就可以了。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('FinalVideo_1642014289.728580.MP4')
while(cap.isOpened()):ret, frame = cap.read()gray = cv.cvtColor(frame, cv.COLOR_BGR2RGB)cv.imshow('frame',gray)if cv.waitKey(1) & 0xFF == ord('q'):break
cap.release()
cv.destroyAllWindows()


视频只有30秒左右,可以看到视频播放速度很快,像是原视频2倍速播放一样。

3.保存视频

我们捕获视频,逐帧处理然后保存下来。对于图像来说,是非常的简单,就用 cv.imwrite()。这里需要做更多的工作。

这次我们创建一个 VideoWriter 对象。我们应该指定输出文件的名字 (例如:output.avi)。然后我们应该指定 FourCC 码。然后应该传递每秒帧数和帧大小。最后一个是 isColor flag。如果是 True,编码器期望彩色帧,否则它适用于灰度帧。

FourCC 是用于指定视频解码器的 4 字节代码。这里 fourcc.org 是可用编码的列表。它取决于平台,下面编码就很好。

In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID 是最合适的. MJPG 结果比较大. X264 结果比较小)
In Windows: DIVX (还需要测试和添加跟多内容)
In OSX: MJPG (.mp4), DIVX (.avi), X264 (.mkv).
对于 MJPG, FourCC 的代码作为 cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) 或 cv.VideoWriter_fourcc(‘MJPG’)* 传递。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 声明编码器和创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):ret, frame = cap.read()if ret==True:frame = cv.flip(frame,0)# 写入已经翻转好的帧out.write(frame)cv.imshow('frame',frame)if cv.waitKey(1) & 0xFF == ord('q'):breakelse:break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()


可以看到有avi文件生成。

总结

GUI功能是opencv的入门知识,还是很好理解的。

OpenCV图像处理——GUI功能(二)相关推荐

  1. OpenCV图像处理——GUI功能(三)

    OpenCV图像处理 文章目录 OpenCV图像处理 一.绘图功能 二.给图像加文字 三.用鼠标作为画笔 四.作为调色板的跟踪栏 总结 一.绘图功能 学习这些函数:**cv.line(), **cv. ...

  2. python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理

    车牌定位中对图像的形态学组合操作处理 所谓的车牌定位,其中最关键的部分就是对图片的处理,参数的设置,并使之拥有泛化能力. 首先传入图片,在进行大规模的图片处理时,因为无法确定图片的尺寸,所以需要将原始 ...

  3. opencv图像处理学习(二十六)——噪声

    1.噪声量化 图像噪声是图像在获取或传输的过程中受到随机信号干扰,妨碍人们对图像处理及分析处理的信号.很多时候将图像噪声看作多位随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布 ...

  4. 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  5. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  6. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  7. OpenCV与图像处理学习十二——图像形状特征之HOG特征

    OpenCV与图像处理学习十二--图像形状特征之HOG特征 一.图像特征理解 1.1 颜色特征 1.2 纹理特征 1.3 形状特征 1.4 空间关系特征 二.形状特征描述 2.1 HOG特征 2.1. ...

  8. Python+Opencv图像处理新手入门教程(三):阈值与二值化

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...

  9. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图

    一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...

最新文章

  1. R语言如何画个性化词云图
  2. sql 字符串比较大小_SQL 数据分析2:简单查询
  3. 在zabbix web上进行监控主机配置
  4. SpringMVC +Hibernate 学习实例
  5. webpack4与babel配合使es6代码可运行于低版本浏览器
  6. linux分区方案 arv,Linux运维 第三阶段 (九)NFS
  7. 智能优化算法:自私羊群优化算法-附代码
  8. android 5.1 内核版本号,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
  9. 运行MINGW时遇到缺少.dll
  10. [RK3399][Android7.1] 移植笔记 --- 音频Codec RT5640添加
  11. stm32 RS485 SP3485
  12. Linked_data
  13. 「第五章」点击劫持(ClickJacking)
  14. GCS_SERVER_PROCESSES
  15. 微信公众号授权绑定第三方应用
  16. EventBus基础
  17. OpenCV进行视频拼接
  18. ES学习(五)同义词分词器dynamic synonym for ElasticSearch
  19. Android nomedia 避免图片等资源泄露在系统图库当中
  20. matlab读取txt/excel文件并画图的方法

热门文章

  1. 基于ARMA模型的国内生产总值时间序列预测研究
  2. 2019年北京西城区青少年人工智能创意编程活动小学组试题参考答案
  3. zynq中mgtx应用_ZYNQ7000性能分析
  4. 一位程序员的爱情表白
  5. 页面初始化设置单选框radio默认选中,清空默认选中
  6. 教幼儿园孩子计算机知识,幼儿园大班数学知识教案-5个5个数数
  7. sql数据类型转换(cast() and convent())函数)(转)
  8. 用python画苹果_Python爬取京东Iphone X用户评论并绘制词云
  9. 使用js实现拖拽功能(附具体实现代码)
  10. 2015RMBP 初次使用上手