Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >关于OpenCV for Python入门-图片和摄像头显示

关于OpenCV for Python入门-图片和摄像头显示

作者头像
python与大数据分析
发布于 2022-04-02 06:45:26
发布于 2022-04-02 06:45:26
1.7K0
举报

OpenCV和Python结合的学习资料不多,网上的资料更是鱼目混杂,推荐大家OpenCV官方教程中文版 for Python,建议自行下载。

其实也算不上原创,多方摘取学习,是opencv学习的开始。

OpenCV三个最核心和常用的模块

core:核心模块,主要包含了OpenCV中最基本的结构(矩阵,点线和形状等),以及相关的基础运算/操作。

imgproc:图像处理模块,包含和图像相关的基础功能(滤波,梯度,改变大小等),以及一些衍生的高级功能(图像分割,直方图,形态分析和边缘/直线提取等)。-

highgui:提供了用户界面和文件读取的基本函数,比如图像显示窗口的生成和控制,图像/视频文件的IO等。

针对视频和一些特别的视觉应用,OpenCV也提供了强劲的支持:

video:用于视频分析的常用功能,比如光流法(Optical Flow)和目标跟踪等。

calib3d:三维重建,立体视觉和相机标定等的相关功能。

features2d:二维特征相关的功能,主要是一些不受专利保护的,商业友好的特征点检测和匹配等功能,比如ORB特征。

object:目标检测模块,包含级联分类和Latent SVM

ml:机器学习算法模块,包含一些视觉中最常用的传统机器学习算法

flann:最近邻算法库,Fast Library for Approximate

Nearest Neighbors,用于在多维空间进行聚类和检索,经常和关键点匹配搭配使用。-

gpu:包含了一些gpu加速的接口,底层的加速是CUDA实现。

photo:计算摄像学(Computational Photography)相关的接口,当然这只是个名字,其实只有图像修复和降噪而已。

stitching:图像拼接模块,有了它可以自己生成全景照片。

nonfree:受到专利保护的一些算法,其实就是SIFT和SURF。

contrib:一些实验性质的算法,考虑在未来版本中加入的。

legacy:字面是遗产,意思就是废弃的一些接口,保留是考虑到向下兼容。

ocl:利用OpenCL并行加速的一些接口。

superres:超分辨率模块,其实就是BTV-L1(Biliteral Total Variation – L1 regularization)算法

viz:基础的3D渲染模块,其实底层就是著名的3D工具包VTK(Visualization Toolkit)

通过opencv开始真简单的图像展示,hello world!

代码语言:javascript
AI代码解释
复制
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 读取图片
img = cv.imread("ldh.jpeg",cv.IMREAD_COLOR)
# 显示图片
cv.imshow('image', img)
# 等待键盘响应
cv.waitKey(0)
# 删除建立窗口
cv.destroyAllWindows()
代码语言:javascript
AI代码解释
复制
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# -----------------------------opencv常用操作----------------------------------
# cv2.imread(filepath,flags) 读入图像
# ----------------参数----------------
# cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
# cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
# 不加此参数,默认是彩色
# cv2.imshow(wname,img) 显示图像
# 第一个参数是显示图像的窗口的名字
# 第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小
# cv2.imwrite(file,img,num)  保存图像
# 第一个参数是要保存的文件名
# 第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95。
# 第三个参数表示的是压缩级别。默认为3.
# img.copy()    #图像复制
# cv2.cvtColor(img,cv2.converttype)  图像颜色空间转换
# opencv 中有多种色彩空间,包括 RGBHSIHSLHSVHSB、YCrCb、CIE XYZCIE Lab 8 种,使用中经常要遇到色彩空间的转化。
# 1、Gray色彩空间  GRAY:灰度图像,其中灰度值由0-255构成八位二进制数
# 2XYZ色彩空间  XYZ:一种便于计算的色彩空间
# 3、YCrCb色彩空间 YCrCb:一种更能描述人眼视觉的色彩空间
#   Y:光亮
#   Cr和Cb:Cr表示红色色度,Cb表示蓝色色度
# 4HSV色彩空间 HSV色彩空间从心理学和视觉的角度出发。
#   色调(Hue,也称为色相)色调指光的颜色,色调与混合光谱中的主要光波长相关。色调的取值区间为[0, 360]。
#   饱和度(Saturation)饱和度是指色彩的深浅程度,指一种颜色混合白光的数量。饱和度取值范围是[0, 1
#   亮度(Value)亮度指人眼感受到的光的明暗程度。指的是颜色能掺入白色的多少。亮度取值范围也是[0, 1]
# 5HLS色彩空间 HLS:将HSV中的V:亮度换成了L:光亮度/明度
#   色调H(Hue):如同HSV中的色调,用一个360度的色环表示。
#   光亮度/明度L(Lightness):用来控制色彩的明暗变化,它的取值范围也是[0, 1]。
#   饱和度S(Saturation):如同HSV中的色调。
# 6、CIELab色彩空间 CIELab色彩空间是均匀色彩空间模型,它是面向视觉感知的颜色模型。
#   L:分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白。
#   A:分量表示从红色到绿色的范围,取值范围是[-127,127]。
#   B:分量表示从黄色到蓝色的范围,取值范围是[-127,127]。
# 7、CIELuv色彩空间 CIELuv也是均匀的颜色模型,适用于显示器显示和根据加色原理进行组合的场合,该模型中比较强调对红色的表示,即对红色的变化比较敏感,但对蓝色的变化不太敏感。
#   L:取值范围为[0 - 100]
#   U:取值范围为[-134 - 220]
#   V:取值范围为[-140 - 122]
# 8、Bayer色彩空间 Bayer色彩空间(Bayer模型)被广泛地应用在CCDCMOS相机中。它能够从单平面RGB交错表内获取彩色图像。输出的RGB图像的像素点值,是根据当前点的1个、2个或4个邻域像素点的相同颜色的像素值获得的。
# img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)   #灰度化:彩色图像转为灰度图像
# img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)   #彩色化:灰度图像转为彩色图像
# cv2.resize(image, image2,dsize)     #图像缩放:(输入原始图像,输出新图像,图像的大小)
# cv2.flip(img,flipcode)                       #图像翻转,flipcode控制翻转效果。
#   flipcode = 0:沿x轴翻转;flipcode > 0:沿y轴翻转;flipcode < 0:x,y轴同时翻转
# cv2.warpAffine(img, M, (400, 600))       #图像仿射变换 :平移;裁剪、剪切、旋转、仿射变换,
#   M、M_crop、M_shear、M_rotate
# cv2.putText(img,'text',(50,150)   #图像添加文字:(照片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细)
# cv2.namedWindow('image', cv2.WINDOW_NORMAL) 命名窗口
# 初始设定函数标签是 cv2.WINDOW_AUTOSIZE,自动调整大小
# cv2.WINDOW_NORMAL,你就可以调整窗口大小了。当图像维度太大,或者要添加轨迹条时,调整窗口大小将会很有用
# ------------------读取彩色图片------------------
img = cv.imread("ldh.jpeg",cv.IMREAD_COLOR)
# 显示图片
cv.imshow('image', img)
# cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。
# 函数等待特定的几毫秒,看是否有键盘输入。
# 特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。
# 如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。
# 它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下。
cv.waitKey(0)
# cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。
# 如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。
cv.destroyAllWindows()

# ------------------读取灰度图片------------------
# 以灰度模式读入图像
img = cv.imread("ldh.jpeg",cv.IMREAD_GRAYSCALE)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()


img = cv.imread('ldh.jpeg',cv.IMREAD_COLOR)
cv.imshow('image',img)
# keycode 1 = 鼠标左键
# keycode 2 = 鼠标右键
# keycode 3 = Cancel
# keycode 4 = 鼠标中键
# keycode 8 = BackSpace
# keycode 9 = Tab
# keycode 12 = Clear(未知)
# keycode 13 = Enter
# keycode 16 = Shift_L
# keycode 17 = Control_L
# keycode 18 = Alt_L
# keycode 19 = Pause
# keycode 20 = Caps_Lock
# keycode 27 = Escape
# keycode 32 = space
# keycode 33 = Prior(PageUp键)
# keycode 34 = Next(PageDown键)
# keycode 35 = End
# keycode 36 = Home
# keycode 37 = Left
# keycode 38 = Up
# keycode 39 = Right
# keycode 40 = Down
# keycode 41 = Select(未知)
# keycode 42 = Print(PrintScreen键)
# keycode 43 = Execute(未知)
# keycode 45 = Insert
# keycode 46 = Delete
k = cv.waitKey(0)
# 按Esc=27,退出
if k == 27:
    cv.destroyAllWindows()
# 按s键,保存图片退出
elif k == ord('s'):
    cv.imwrite('ldhbak.jpeg',img)
    cv.destroyAllWindows()

# 用matplotlib显示图片
img = cv.imread('ldh.jpeg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])
plt.show()

关于读取摄像头的操作

代码语言:javascript
AI代码解释
复制
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


# 处理摄像头视频
# 创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件,笔记本内置涉嫌头一般是0
# cv2.VideoCapture()
# cap.read() 返回一个布尔值(True/False)。如果帧读取的是正确的,就是 True。
# 使用 cap.isOpened(),来检查是否成功初始化了
# 如果返回值是True,那就没有问题。
# 否则就要使用函数 cap.open()。
# cap.get(propId) 来获得视频的一些参数信息
#   0-视频文件的当前位置毫秒
#   1-下一步要解码/捕获的帧的基于0的索引
#   2-视频文件的相对位置:0-胶片开始,1-胶片结束
#   3-视频流中帧的宽度
#   4-视频流中帧的高度
#   5-帧率
#   6-编解码器的4字符代码
#   7-视频文件中的帧数。
#   8-返回mat对象的格式
#   9-后端特定值,指示当前捕获模式
#   10-图像的亮度–仅适用于相机
#   11-对比度–仅用于相机
#   12-饱和度–仅用于相机
#   13-色调–仅用于相机
#   14-增益–仅用于相机
#   15-曝光–仅用于相机
#   16-布尔标志,指示是否应将图像转换为RGB。
#   17-当前不受支持
#   18-立体摄像机的校正标志注:目前仅受DC1394 v 2.x后端支持
# 对应的,使用 cap.set(propId,value) 来修改视频属性,value 就是你想要设置成的新值
# 创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件,笔记本内置涉嫌头一般是0
cap = cv.VideoCapture(0)

while(True):
    # 一帧一帧获取视频码流
    ret, frame = cap.read()
    # 对帧进行颜色加工
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 实时显示帧信息
    cv.imshow('frame',gray)
    #响应按键,退出
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
# 释放摄像头,删除窗口
cap.release()
cv.destroyAllWindows()



# 是从摄像头中捕获视频,沿水平方向旋转每一帧并保存它
# 创建一个 VideoWriter 的对象。
# 确定一个输出文件的名字。
# 指定 FourCC 编码.
#   FourCC 就是一个 4 字节码,用来确定视频的编码格式
# 播放频率和帧的大小也都需要确定。
# 最后一个是 isColor 标签。
#   如果是 True,每一帧就是彩色图,否则就是灰度图
# 打开当前摄像头
cap = cv.VideoCapture(0)
# 定义视频的编码格式
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:
        # flip()的作用是使图像进行翻转
        #   filename:需要操作的图像
        #   flipcode:翻转方式
        #       1  水平翻转
        #       0  垂直翻转
        #       -1 水平垂直翻转
        frame = cv.flip(frame,0)

        # 将处理后的帧写入输出文件
        out.write(frame)
        # 并在当前窗口显示帧
        cv.imshow('frame',frame)
        # 按键退出
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# 释放输入流输出流,关闭窗口
cap.release()
out.release()
cv.destroyAllWindows()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换
1. 学习目标 图像色彩空间; 函数说明与解释; 学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等; 学习 cv.cvtColor 函数的使用。 2. 常见色彩空间 3. 常见色彩空间说明 名称 说明 HSV 对计算机友好,区分各种色彩。 RGB 设备独立。 YCrCb Y分量表示信息,CrCb可以被压缩。 RGB是计算机显示器的标准支持色彩系统。 4. 常见色彩空间取值范围 名称 范围 HSV H:0-180;SV:0-255 RGB 0-255 5. 色彩空间转换
Rattenking
2022/10/04
1.2K0
OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换
Opencv 图像处理:图像通道、直方图与色彩空间
将彩色图像,分成b 、g 、r 3个单通道图像。方便我们对 BGR 三个通道分别进行操作。
timerring
2022/11/02
2.6K0
Opencv 图像处理:图像通道、直方图与色彩空间
【计算机视觉】使用OpenCV处理色彩空间(Python版)
GRAY色彩空间通道指的是灰度图像,灰度图像的通常只有1个,值范围是[0, 255],一共256个灰度级别。其中0表示纯黑色,255表示纯白色。0~255之间的数值表示不同的亮度(即色彩的深浅程度)的深灰色或浅灰色。因此,一副灰度图能展示丰富的细节信息,如图1所示。
蒙娜丽宁
2023/03/08
2.7K0
【计算机视觉】使用OpenCV处理色彩空间(Python版)
Python数字图像处理——OpenCV实例解析
cv.ADAPTIVE_THRESH_MEAN_C:该阈值是平均值的附近区域减去恒定的Ç。 cv.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值减去常数C的高斯加权和。
荣仔_最靓的仔
2021/02/02
1.4K0
Python数字图像处理——OpenCV实例解析
【C++】OpenCV:图像视频读取基础操作
这里使用VideoCapture类打开输入视频文件,使用VideoWriter类创建输出视频文件(甚至可以进行格式转换)。
DevFrank
2024/07/24
5740
【C++】OpenCV:图像视频读取基础操作
Python opencv图像处理基础总结(一)
Open Source Computer Vision Library,OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。它轻量而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
叶庭云
2020/09/17
1.4K0
Python  opencv图像处理基础总结(一)
10行代码实现python人脸识别
人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。
星星在线
2020/05/22
5.3K1
使用OpenCV调用摄像头,显示图片,获取视频并保存
友情链接:https://blog.csdn.net/u012348774/article/details/78255130
种花家的奋斗兔
2020/11/13
4.5K0
基于OpenCV的彩色空间互转
图像彩色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效;另外,相比RGB,其他颜色空间(比如HSV、HSI)更具可分离性和可操作性,所以很多图像算法需要将图像从RGB转为其他颜色空间,所以图像彩色互转是十分重要和关键的。
Datawhale
2020/06/23
2.9K0
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
OpenCV 的全称是 Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV 是由英特尔公司发起并参与开发,以 BSD 许可证授权发行,可以在商业和研究领域中免费使用。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的 IPP 进行加速处理。
爱喝兽奶的熊孩子
2024/05/24
4K0
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
OpenCV基础 | 4.色彩空间的转换
作者:小郭学数据 源自:快学python 学习视频可参见python+opencv3.3视频教学 基础入门[1] 今天写的是色彩空间的转换 1.常见色彩空间及色彩空间转换 RGB 红色:Red,绿色:Green,蓝色:Blue HSV 色相:Hue(0-180),饱和度:Saturation(0-255),明度;Value(0-255) 常用于颜色检测 HSL/HLS 色相:Hue、饱和度:Saturation、亮度:Lightness/Luminance 色相H:用角度度量,取值范围为0°~360°,从
快学Python
2021/08/09
7060
opencv之打开摄像头、边缘检测
许多工业相机或某些视频I / O设备不为操作系统提供标准的驱动程序接口。因此,您不能在这些设备上使用VideoCapture或VideoWriter。
全栈程序员站长
2022/07/23
4K0
opencv之打开摄像头、边缘检测
[python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
色彩空间又可以叫做色域,英文是Color Sapce,是一种人为建立,用于表示色彩的一种“坐标系统”,或者说是一种色彩访问的取值系统,用于描述色彩。了解色彩空间对我们今后使用opencv进行图像处理很重要,在今后对图像处理时将会涉及到色彩空间的内容,所以学习了解色彩空间是有必要的。
1_bit
2021/01/14
1.6K0
[python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
CV学习笔记(三):色彩空间
在这一篇文章中,我们将会学习使用一下OpenCV中色彩空间的转换函数,我们这里说的色彩空间是说的使用多种颜色(通常指三种以上),来表示颜色的方法,像是我们平时所说的RGB,HSV,YUV,YCRCB,都是色彩空间模型。OpenCV也很方便的封装了很多的色彩空间函数。下面我们一起来实践一下(以下所有试验都根据下图完成,我截取的Windows自带的壁纸^_^)
云时之间
2020/01/18
7510
CV学习笔记(三):色彩空间
OpenCV从入门到精通:安装、配置、依赖、基本语法与常用方法详解
本文旨在为计算机视觉初学者提供一份详尽的OpenCV入门指南。从OpenCV的安装配置、依赖项安装,到基本语法和常用方法的解析,我们力求以通俗易懂的方式,配合丰富的代码示例,帮助读者快速掌握OpenCV的核心概念和技术,并为后续深入学习打下坚实的基础。无论您是Python爱好者还是C++开发者,都能从中受益。最后,欢迎大家加我的微信一起交流学习!
默 语
2025/05/12
1.1K0
Python opencv图像处理基础总结(三) 图像直方图 直方图应用 直方图反向投影
图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。直方图的显示方式是左暗又亮,左边用于描述图像的暗度,右边用于描述图像的亮度。
叶庭云
2020/09/17
4.5K0
Python  opencv图像处理基础总结(三)  图像直方图  直方图应用  直方图反向投影
OpenCV 教程 03: 如何跟踪视频中的某一对象
视频的每一帧就是一张图片,跟踪视频中的某一对象,分解下来,其实就是在每一帧的图片中找到那个对象。
somenzz
2022/10/25
1K0
OpenCV 教程 03: 如何跟踪视频中的某一对象
OpenCV学习+常用函数记录①:图像的基本处理
默认使用的是双线性插值法,可以利用opencv提供的 resize 方法来进行图片的缩放
小黑鸭
2020/11/24
2.2K0
TensorFlow进行简单的图像处理
TensorFlow进行简单的图像处理 简单概述 作为计算机视觉开发者,使用TensorFlow进行简单的图像处理是基本技能,而TensorFlow在tf.image包中支持对图像的常见的操作包括: 亮度调整 对比度调整 饱和度调整 图像采样插值放缩 色彩空间转换 Gamma校正 标准化 图像的读入与显示我们通过OpenCV来实现,这里需要注意一点,OpenCV中图像三个通道是BGR,如果你是通过tensorflow读取的话三个通过顺序是RGB。图像读取的代码如下: 1.opencv方式 src = cv
OpenCV学堂
2018/04/04
2.2K0
TensorFlow进行简单的图像处理
【python-opencv】读取、显示、写入图像
cv.waitKey()是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果0被传递,它将无限期地等待一次敲击键。它也可以设置为检测特定的按键,例如,如果按下键 a 等,我们将在下面讨论。
西西嘛呦
2020/08/26
1.9K0
推荐阅读
相关推荐
OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场