读取cv.VideoCapture(0)的frame帧转变为PIL.Image图片格式时遇到的坑

您所在的位置:网站首页 怎样将视频转换成照片 读取cv.VideoCapture(0)的frame帧转变为PIL.Image图片格式时遇到的坑

读取cv.VideoCapture(0)的frame帧转变为PIL.Image图片格式时遇到的坑

2024-07-16 05:10:49| 来源: 网络整理| 查看: 265

在项目中遇到一个问题是想将VideoCapture()读到的frame图片转变成PIL的Image图片格式。

坑1:BGR还是RGB模式?

兴冲冲地在在网上找到一段代码,将opencv中的imread()图像转成PIL.Image格式,详见python中PIL.Image和OpenCV图像格式相互转换

OpenCV转换成PIL.Image格式:

import cv2 from PIL import Image import numpy img = cv2.imread("plane.jpg") cv2.imshow("OpenCV",img) image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) image.show() cv2.waitKey()

于是将image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))复制了一遍,结果得到

open cv error: (-215) scn == 3 || scn == 4 in function cvtColor

的错误,参考了下stackflow上类似的回答发觉应该是颜色空间的问题——意思是原来的颜色空间和要改的颜色空间是一样的,比如原来是灰度空间,就不用再cv.COLOR_BGR2GRAY了,于是这才意识到有可能VideoCapture(0)和imread()得到的颜色空间是不同的。

其实VideoCapture()与imread()得到图像的颜色空间并不相同,VideoCapture得到的图片是RGB空间的,而imread得到的图片是BGR空间的,因此这里不需要cv2.cvtColor(imgmcv2.COLOR_BGR2RGB),直接image = Image.fromarray(frame)即可,frame是VideoCapture读到的帧,Image.fromarray()可以将np.array转成image格式的图像。

坑2 : type(frame)的结果是 ‘Nonetype’

上一步改完后image = Image.fromarray(frame)后还是会报错,我寻思是不是frame的格式还是有问题,结果测试得到opencv读取的帧是Nonetype摄像头也没有画面。

报的错是Image.fromarray(object)没有Nonetype这种格式,仔细想了想,以前久遇到过这种问题,就是opencv的VideoCapture没有读到帧的时候frame就会返回Nonetype,而ret返回的是False,所以在读取视频的循环中加一个条件判断语句即可,if ret ==True:的时候进行操作:

cap = cv2.VideoCapture(0) while(1): ret,frame =cap.read() if ret==True: print (type(frame)) print (ret)#观察frame和ret的类型 img = Image.fromarray(frame)#完成np.array向PIL.Image格式的转换 cv2.imshow("frame", frame)#正常显示frame cv2.waitKey(1)

后面得到的结果就是ret为True,frame的type()为np.array。

总结

其实出现这么多的坑就是因为对opencv读取图片的颜色空间和数据格式不清楚,他们里面有BGR和RGB颜色空间,而一般cv2.imread()读取的图片都是BGR颜色空间的图片,cv2.VideoCapture()获取的视频帧是RGB颜色空间的图片。PIL(Python Image Library)读取的图片是RGB颜色空间的。 opencv读取的图片不管是视频帧还是图片都是矩阵形式,即np.array,转PIL.Image格式用PIL.Image.fromarray()函数即可。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭