首页 > 其他分享 >图像数据处理——2.1 opencv基础入门

图像数据处理——2.1 opencv基础入门

时间:2024-12-01 12:01:21浏览次数:6  
标签:视频 读取 img cv2 opencv 数据处理 2.1 retval 图片

目录

2.1 opencv 基础入门

1. 图片读显存

2. 读显存进阶

3. 视频读存属性


2.1 opencv 基础入门

1. 图片读显存

  • 图像基本概念:图像由像素点组成,每个像素点包含三个值R,G,B,取值范围在0-225之间,其值越大则强度越大,越接近于白色,一般来说一个彩色图像是具有三个通道构成的数组,灰度图像只有一个表示强度的通道。
  • 函数讲解:cv2.imread;cv2.imshow;cv.imwrite
1.1 读取图片:retval= cv2.imread(filename, flags)
说明:retval 表示返回值,为一个numpy数组;filename表示图片的路径,需要注意不能包含中文路径,且路径错误时不会报错,但retval为none;flags表示读取图片的格式,主要有以下三种:
    cv2.IMREAD_COLOR:默认参数,彩图,可以用1代替,忽略alpha通道;
    cv2.IMREAD_GRAYSCALE:读入灰度图片,可以用0代替;
    cv2.IMREAD_UNCHANGED:读取完整图片,可以用-1代替,包括alpha通道。

1.2 显示图像:cv2.imshow(window_name, image)    #窗口自适应图片大小  
 说明:window_name表示窗口的名称,image为读取进来的图像

1.3 保存图片:retval =cv2.imwrite(filename,image,num)
说明:retval为True表示保存成功,反之为False;filename表示保存文件路径,一般来说也不可以包含中文,image表示需要保存的图像,num是可选参数,针对特定图片格式:
    JPEG/jpg,num表示的是图像质量,默认为95,取值范围为0-100的整数,值越大保存质量越高。需要配合函数使用
    Png:num表示压缩级别,默认为3,取值范围为0-9,值越大则图片压缩的越小,压缩时间越长。需要配合函数使用 

    

 alpha通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明。

  •  代码示例:显示框时长、删除窗口、更改保存图片大小与质量等
import cv2
#1. 读取图片
img = cv2.imread('1.png', cv2.IMREAD_COLOR) #彩色图像
print(type(img),img.shape)
# img = cv2.imread('messi5.jpg', 0) #灰度图片
#2. 展示图片
cv2.imshow('image',img)
cv2.waitKey(0)   #无限等待键盘输入,键入程序将会继续运行
#cv2.destroyAllWindows()  # 删除所有建立的窗口
cv2.destroyWindow('image') #删除指定窗口,需要传入特定窗口名称
#3.写入图片
cv2.imwrite('messigray.png',img,3)  #普通写入
cv2.imwrite('111.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])  #更改图片质量
cv2.imwrite('11.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 8])  #压缩图片

2. 读显存进阶

  • 函数讲解:cv2.imdecode;cv2.imencode;cv2.encode
2.1 读取含中文路径图片:cv2.imdecode(buf,flags)
说明:从指定内存缓存中读取数据,并把数据转换(解码)成图像格式,常用于从网络传输数据中恢复出图像。buf表示以字节为单位接收到的图像数据;flags表示读取图片的格式,与上文imread中flags一致。
如果给定的 buf 不是图像数据,则将返回 NULL
2.2 写入含中文路径图片:retval = cv2.imencode(ext, img[, params])
说明:将图片格式转换(编码)成流数据,赋值到内存缓存中,主要用于图像数据格式的压缩,方便网络传输。ext表示图片名称后缀,img为np.ndarray格式的图像,params表示保存图片的参数,与imwrite中num参数一致;retval为二元数组,第一个元素与cv2.imwrite返回值一致,第二个元素为np.ndarray类型的图像文件内容。
2.3 将图像编码到内存缓冲区中:cv2.encode
说明:将数组中的数据以二进制格式写进文件:np.tofile
  • 代码示例: 中文路径的读取与保存,以及显示设置的键盘交互
import cv2
import numpy as np
#1. 读取中文路径的图像
imgFile = "图1.png"  # 带有中文的文件路径和文件名
img = cv2.imdecode(np.fromfile(imgFile, dtype=np.uint8), -1)
#2. 展示图片
cv2.imshow('image',img)
k= cv2.waitKey(0)   #等待键盘输入,键入程序将会继续运行
if k ==27: #esc键继续往下执行
    cv2.destroyWindow('image') #删除指定窗口,需要传入特定窗口名称
elif k == ord('s'):  # s键保存图片
    saveFile = "测试图.jpg"  # 带有中文的保存文件路径
    img_write = cv2.imencode(".jpg", img)[1].tofile(saveFile)

3. 视频读存属性

  • 视频基本概念:视频是由一系列的图片组成的,它们被称为 “帧” (frame)。所以,所需做的就是通过循环将一个是视频流中的所有的帧都进行处理,每次处理一帧。
  • 函数讲解:
3.1 创建读取视频的对象:cap = cv2.VideoCapture(path)
说明:path表示视频的路径。1)当其为帧数时,读取本地摄像头,0为默认相机;2)当其为视频路径时,表示读取本地视频文件;3)当前为url时,表示读取指定ip摄像头。
3.2 判断视频是否打开:retval = cv.VideoCapture.isOpened()
说明:retval为布尔类型数据,当其为True时,表示视频已成功捕获;当其为False时表示视频被破坏或者一些帧被破坏。
3.3 读取每帧图像:retval, frame = cv.VideoCapture.read( [, frame] )
说明:retval为布尔类型数据,当其为True时,表示该帧数据是否被正确读取,当读取到视频末尾,返回False;frame表示该帧视频的像素点。
3.4 视频保存:cv2.VideoWriter (path, fourcc, fps, size)
说明:path表示视频保存地址;fourcc表示视频编码器4字节代码;fps(float)表示视频帧率,size(数组)表示保存视频的帧的大小,为(宽,高)
3.5 获取视频的编码器:fourcc = cv2.VideoWriter_fourcc(*'XVID')
说明:fourcc是视频的播放格式,主要包括DIVX(“.avi”), MJPG(“.mp4”), X264(“.mkv”)等,其中DIVX被应用最为广泛,Windows和os中都可以应用。被传给代码的写入方法为cv2.VideoWriter_fourcc("D","I","V","X")
3.6 释放视频:cap.realease()
3.7 将图片变为灰度图:cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
3.8 修改视频的属性信息: cap.set(propId,value)
说明:proid: 属性的索引;value: 修改后的属性值
3.9 获取视频属性:retval = cap.get(propId)
说明:propId(0-18数字):每个数字表示视频的属性,常用属性为0-7如下图

  • 代码示例
import cv2
cap = cv2.VideoCapture('2.dav')     # 读取视频文件
#VideoCapture()中参数是0,表示打开笔记本的内置摄像头。
# video = cv.VideoCapture(0)
# 读取ip摄像头, 举例海康威视摄像头主码流
#reader = cv2.VideoCapture("rtsp://admin:12345@192.168.2.65:554/h264/ch1/av_stream")
if (cap.isOpened() == False): # 检查是否正确打开
    print("Error opening the video file")
fourcc =  cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc,20.0, (640,480))
while cap.isOpened():
    ret, frame = cap.read()  
    if frame is None:
        break
    if ret:                         # 若是读取成功
        # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #转为灰度图像显示
        cv2.imshow('frame', frame)  # 显示读取到的这一帧画面
        out.write(frame)
        key = cv2.waitKey(25)       # 等待一段时间25毫秒,并且检测键盘输入
        if key == ord('q'):         # 若是键盘输入'q',则退出,释放视频
            cap.release()           # 释放视频
            break
    else:
        cap.release()
        out.release()
cv2.destroyAllWindows()             # 关闭所有窗

补充:视频读写进阶 

标签:视频,读取,img,cv2,opencv,数据处理,2.1,retval,图片
From: https://blog.csdn.net/m0_59148663/article/details/144163142

相关文章

  • ADI公司推出多款用于无线通信设备和数据处理的 ADUM7703-8BRIZ/ADL6010SCPZNHMC342LC4
    ADI公司推出多款用于无线通信设备和数据处理的ADUM7703-8BRIZ/ADL6010SCPZNHMC342LC4TR/ADAU1772BCPZ器件ADAU1772BCPZ是一款具有四个输入和两个输出的编解码器,内置数字处理引擎,可执行滤波、电平控制、信号电平监控和混合。从模拟输入至DSP内核再到模拟输出的路径经过优化,实现......
  • opencv调用摄像头(卡尔曼滤波)
    importcv2importnumpyasnpimportonnxruntimeimportxlsxwriterimportos#coco80类别CLASSES=['card']classYOLOV5():def__init__(self,onnxpath):self.onnx_session=onnxruntime.InferenceSession(onnxpath)self.input......
  • opencv调用摄像头并输出位置信息
    importcv2importnumpyasnpimportonnxruntimeimportxlsxwriterimportos#coco80类别CLASSES=['card']classYOLOV5():def__init__(self,onnxpath):self.onnx_session=onnxruntime.InferenceSession(onnxpath)self.input......
  • 山泽 HDMI 2.1 线材评测:连接未来,享受极致视听体验
    随着HDMI2.1标准的普及,越来越多的用户开始关注支持这一标准的线材。山泽作为一家专业的数码配件品牌,推出了多款HDMI2.1线材,旨在为用户提供更高质量的音视频传输解决方案。下面我们将详细评测山泽HDMI2.1线材的性能和特点。产品概述山泽HDMI2.1线材专为新一代显......
  • 山泽HDMI 2.1线材:连接未来的高清视界
    在数字娱乐和高清视频日益普及的今天,高质量的HDMI线材成为了连接各种设备不可或缺的一部分。山泽作为一家专注于高品质线材制造的品牌,推出了其HDMI2.1线材,旨在为用户提供卓越的传输性能和可靠的连接体验。本文将详细介绍山泽HDMI2.1线材的特点及其优势。产品概述山泽HDMI......
  • 一篇文章讲清楚HDMI 2.1的一切-山泽品牌解析
    HDMI2.1是高清多媒体接口(HDMI)的最新版本,它带来了一系列显著的技术升级和新功能,以下是HDMI2.1的主要特点和详细解释:1.高带宽支持HDMI2.1的最大带宽提升至48Gbps,这为高分辨率和高刷新率的视频传输提供了强有力的支持。这使得HDMI2.1能够支持高达10K的分辨率,满足商业AV、工......
  • 机器学习实战:泰坦尼克号乘客生存率预测(数据处理+特征工程+建模预测)
    项目描述任务:根据训练集数据中的数据预测泰坦尼克号上哪些乘客能生存下来数据源:csv文件(train.csv)目标变量:Survived(0-1变量)数据集预览:1、英文描述:2、译文描述:初步分析注:代码后紧跟运行结果截图1、查看数据importpandasaspdimportnumpyasnpimportmatplotlib......
  • 关于图的数据处理
    functionsspPolymerizationEcharts(){constchartDom=document.getElementById('main');constmyChart=echarts.init(chartDom);//从allData获取数据constdata=allData.value;//提取数据列constdatelist=data.map(item=>item.date);constreqCoun......
  • pip 下载包失败(特定版本eg: torch==2.2.1+cu118)
    背景介绍:有时候要复现其项目的实验时,环境需要尽量与原作者实验的环境靠近,这样结果浮现的也更加准确。这里当需要安装torch==2.2.1+cu118等特定版本的时,出现了报错:解决办法:根据PyTorch官方推荐,可以使用以下命令来安装torch2.2.1+cu118版本pipinstalltorch==2.2.1t......
  • Vmware系列&虚拟机系列【亲测有效】:Vcenter 7.0 添加主机报错(出现了常规系统错误: Una
    Vcenter7.0添加主机报错(出现了常规系统错误:Unabletopushsignedcertificatetohost172.17.5.242)...Vcenter7.0添加主机报错(出现了常规系统错误:Unabletopushsignedcertificatetohost172.17.5.242)...故障现象解决方法Vcenter7.0添加主......