Python接收摄像头输出的YCbYCr数据并显示图像(附Python源码)

news2024/12/23 12:55:38

前言

摄像头用的OV的2640,输出YCbYcr的十六进制数据,数据保存成字符串形式的hex文件,之后用Python读取文件,并显示图片。
文章先搭建Python环境,之后编程实现十六进制数据显示图片的功能。
十六进制文件格式如下图:
在这里插入图片描述

python安装目录及文档

1、编译运行
在IDLE (Python 3.10 64-bit)中可以编译运行,也可以在cmd下面运行。
在这里插入图片描述

1、在cmd下执行 py
在这里插入图片描述

Win10+Python3.10+OpenCV4.6.0加载显示图片

参考文章:
https://blog.csdn.net/chexlong/article/details/126596461
1、安装 opencv,制定地址,否则timeout
Win10+Python3.10+OpenCV4.6.0加载显示图片用win键+X启动Windows powershell 管理员模式,执行
在这里插入图片描述
PS C:\Users\Administrator> pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
有可能不认pip命令,把路径加到path里面
在这里插入图片描述
安装完成之后检查一下
在这里插入图片描述
接下来使用下边命令安装opencv-contrib-python。那么它与opencv-python有啥区别呢?opencv-python是只包含了主要模块的包,opencv-contrib-python包含了主要模块以及扩展模块,扩展模块主要是包含了一些带专利的收费算法(如shift特征检测)以及一些在测试的新的算法(稳定后会合并到主要模块)。如果您用不到扩展模块,这个也可以不安装。
pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述之后就可以写py程序了。
e:\work\technology\python\crycbyimage\crYcbYimage.py

十六进YCbYCr摄像头数据接收并显示图像

源码如下:
· 首先,进入终端(命令行),使用pip命令安装numpy库和PIL库
· 安装numpy: pip3 install numpy
· 安装pillow: pip3 install pillow
· · 安装好了之后,新建一个’crYcbYimage.py’,输入以下代码:
import cv2
#from numpy import *
from PIL import Image

import time
import numpy as np
#from alive_progress import alive_it

print(“begin”)

#读取的txt文件
infile = open(“640x120crYcbY-L5s-04.txt”,“r”);
#输出的cer文件,当然你想输出什么格式都可以
outfile = open(“testcrYcbY.yuv”,“wb”);
#tell1=infile.seek(0,2)
#开始读文件
a = infile.read(1);
_combine = “”;
#print(a)
i=0;

while a != ‘\n’:

while a :
if ’ ’ == a:
a = infile.read(1);
continue;
else:
_combine = _combine + a;
i = i+1;
if 2 == i :
i = 0;
#此处转化为16进制
outfile.write(bytes.fromhex(_combine));
_combine = “”;
a = infile.read(1);
#print(a)
infile.close();
outfile.close();
print(“finish change ascii to hex”)

screenLevels = 320.240
#读取YUV格式图像文件
def read_yuv422(image_path, rows, cols):
“”"
:param image_path: 待转换的.yuv图像文件路径
:param rows: 图像行数
:param cols: 图像列数
:return: y,u,v分量
“”"

# 创建y分量
img_y_1 = np.zeros((rows, int(cols/2)), np.uint8)
img_y_2 = np.zeros((rows, int(cols / 2)), np.uint8)
img_y = np.zeros((rows, cols), np.uint8)

# 创建u分量
img_u = np.zeros((rows, int(cols / 2)), np.uint8)

# 创建v分量
img_v = np.zeros((rows, int(cols / 2)), np.uint8)

# 读取内存中数据
reader=open(image_path, 'rb')
# reader.seek(0,0) 
for i in range(rows):
    for j in range(int(cols/2)):
        #temp=reader.read(1)
        #print(temp,i,j)
        
        img_v[i, j] = ord(reader.read(1))
        img_y_1[i, j] = ord(reader.read(1))
        
        
        img_u[i, j] = ord(reader.read(1))
        img_y_2[i, j] = ord(reader.read(1))

for i in range(rows):
    for j in range(int(cols/2)):
        img_y[i, 2*j] = img_y_1[i, j]
        img_y[i, 2*j+1] = img_y_2[i,j]

return img_y, img_u, img_v

#把YUV格式数据转换为RGB格式
def yuv2rgb422(y, u, v):
“”"
:param y: y分量
:param u: u分量
:param v: v分量
:return: rgb格式数据以及r,g,b分量
“”"

rows, cols = y.shape[:2]

# 创建r,g,b分量
r = np.zeros((rows, cols), np.uint8)
g = np.zeros((rows, cols), np.uint8)
b = np.zeros((rows, cols), np.uint8)

for i in range(rows):
    for j in range(int(cols/2)):
        r[i, 2 * j] = max(0,min(255,y[i, 2 * j] + 1.402 * (v[i, j] - 128)))
        g[i, 2 * j] = max(0,min(255,y[i, 2 * j] - 0.34414 * (u[i, j] - 128) - 0.71414 * (v[i, j] - 128)))
        b[i, 2 * j] = max(0,min(255,y[i, 2 * j] + 1.772 * (u[i, j] - 128)))

        r[i, 2 * j+1] = max(0,min(255,y[i, 2 * j+1] + 1.402 * (v[i, j] - 128)))
        g[i, 2 * j+1] = max(0,min(255,y[i, 2 * j+1] - 0.34414 * (u[i, j] - 128) - 0.71414 * (v[i, j] - 128)))
        b[i, 2 * j+1] = max(0,min(255,y[i, 2 * j+1] + 1.772 * (u[i, j] - 128)))

rgb = cv2.merge([b, g, r])

return rgb, r, g, b

img_yuv=read_yuv422(‘testcrYcbY.yuv’,120,640)

cv2.imshow(“YUV_Y”,img_yuv[0])#显示从文件提取出的Y分量
cv2.imwrite(“img-onlyY04.jpg”,img_yuv[0])

img_rgb=yuv2rgb422(img_yuv[0],img_yuv[1],img_yuv[2])

cv2.imshow(“RGB”,img_rgb[0])
cv2.imwrite(“img04.jpg”,img_rgb[0])

cv2.waitKey(0)

演示效果

在这里插入图片描述
欢迎V28775855交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-table合计样式修改,增加图片

这里的表格用的是el-table组件。如上图,在底部合计的两个字段上增加图片。合计用的是:summary-method"getSummaries"。增加图片的原理其实就是获取这个单元格的dom元素定位,然后在这个元素里面增加 img元素,还可以设置样式。如下图…

Django之常用组件

一、分页器组件 class Pagination(object):def __init__(self,current_page,all_count,per_page_num2,pager_count11):"""封装分页相关数据:param current_page: 当前页:param all_count: 数据库中的数据总条数:param per_page_num: 每页显示的数据条数:par…

峰会来袭 | CAD模型转换工具选择的难点和关键点解答

作为世界顶尖的3D软件开发SDK和CAD模型转换工具——HOOPS Exchange已问世十多年,深受开发者好评,并在工业测量、机械加工、造船设计等领域都有广泛的应用。 本次峰会将围绕CAD软件造型技术的多样性、CAD模型数据解析的难点、3D模型转换的经典问题等&…

曝光调整和曝光融合论文粗读

曝光调整论文调研 M. Afifi, K. G. Derpanis, B. Ommer and M. S. Brown, “Learning Multi-Scale Photo Exposure Correction,” 2021 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), Nashville, TN, USA, 2021, pp. 9153-9163, doi: 10.1109/CVPR4…

开放式耳机什么牌子性价比好,这些高颜值蓝牙耳机分享给你

入耳式耳机在运动过程中会与耳道产生摩擦,产生咀嚼音、摩擦音等杂音,会让耳朵难受,听音也会受到影响,特别是像边看电视剧边吃零食等情况,会很影响体验感,所以开放式耳机不入耳的设计完全处理了这一问题&…

卷积神经网络| 猫狗系列【AlexNet】

首先,搭建网络: AlexNet神经网络原理图: net代码:【根据网络图来搭建网络,不会的看看相关视频会好理解一些】 import torchfrom torch import nnimport torch.nn.functional as Fclass MyAlexNet(nn.Module): def…

Linux系统之neofetch工具的基本使用

Linux系统之neofetch工具的基本使用 一、neofetch工具介绍1.1 neofetch简介1.2 neofetch特点 二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本 三、安装neofetch工具3.1 配置yum仓库3.2 安装neofetch3.3 查看neofetch版本 四、neofetch工具的基本使用4.1 直接使用neofet…

quilt data-Working with the Catalog

Quilt Catalog 是 Quilt 的第二部分。它提供了一个在您的 S3 存储桶上的界面,将 Quilt 的数据包和搜索等功能带到了 Web 界面上。 请注意,您可以在不使用 Quilt Catalog 的情况下使用 Quilt Python API,但它们是设计为配合使用的。 简要介绍…

【实现openGauss5.0企业版一主一备搭建部署】

【实现openGauss5.0企业版一主一备搭建部署】 🔻 前言🔻 一、安装前准备🔰 1.1 openGauss安装包下载🔰 1.2 安装环境准备⛳ 1.2.1 硬件环境要求⛳ 1.2.2 软件环境要求⛳ 1.2.3 软件依赖要求⛳ 1.2.4 修改 hosts 和 hostname&#…

【react】创建启动react项目和跨域代理:

文章目录 1、创建启动react项目:2、跨域代理:【1】文档:[https://create-react-app.dev/docs/proxying-api-requests-in-development/](https://create-react-app.dev/docs/proxying-api-requests-in-development/)【2】src/setupProxy.js: 1…

阿姆斯特丹大学Max Welling教授-深度学习和自然科学

目录 简介 AI4Science & Science4AI 深度学习简介 AI4Science Science4AI 总结/结束语 参考 简介 人工智能一直与自然科学有着深厚的联系。 人工神经网络最初被认为是生物神经网络的抽象,许多后续算法(例如强化学习)也是如此。 神经…

springcloud actuator暴露端点漏洞修复

前段时间网络安全的同事突然通知系统漏洞,swagger漏洞和暴露多余端点等,可能会泄露信息。刚开始只是修改了相关配置。如下: 更改config配置 management:security:enabled: true security:user:name: xxxpassword: xxxbasic:enabled: trueen…

配置tensorflow1.15版本遇到的问题:conda环境管理/tensorflow历史版本下载/pycharm中如何使用conda中的虚拟环境

0、前言: 我之前在做配置环境,或者不懂的操作时,总是遇到问题在csdn或者网上搜就行了,然后解决问题之后,也不知道期间搜了哪些知识。也记不住一些修改的地方,这就导致,我十分担心好不容易搭好的…

spring系列-SpringCloud

SpringCloud概述 微服务概述 什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分 将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事。 与微服务相对的叫巨石 …

“提高个人生产力:思维导图在时间管理和计划中的应用“

在高效成为当今时代职场人高频谈论的一个词后,时间管理和计划的重要性也日渐显现。一个好的时间管理和计划可以在不知不觉中有效帮助我们更加合理的安排时间,保证工作的有序进行和按时完成。通过合理的协调工作与休息之间的关系,避免我们浪费…

15、服务端实战:数据库工具封装

在了解完 NestJS 的基础配置之后,服务端的内容将引来一个比较重要的环节:数据库。 因为数据库的内容比较多,所以相关内容将分为两个章节来展开讨论: 数据库工具封装 - 将封装统一的数据库操作工具类,方便后期开发于集…

识别肿瘤内微生物的生物信息学工具—MEGA

谷禾健康 已有研究证明宿主微生物在癌症预防和治疗反应中的关键作用,了解宿主微生物和癌症之间的相互作用,可以推动癌症诊断和微生物治疗(即用微生物作为药物)。 然而肿瘤内微生物组数据通常是复杂的,想要厘清相互关系也是极为困难的&#xf…

低代码平台——少量编码即可快速生成应用程序

低代码平台,即无需编码或通过少量代码就可以快速生成应用程序的开发平台。 低代码平台面向的是IT或者平民程序员,解决传统软件开发模式带来的周期长、成本高等问题,客户群体主要为软件开发公司或者拥有IT的中大型企业。而零代码(N…

API接口测试工具的几个特色

API接口测试工具在软件开发过程中起着举足轻重的作用。它们帮助测试人员快速发现和解决API接口的问题,并确保系统的稳定性和性能。本文将介绍API接口测试工具的几个特色,以及为什么它们对测试人员来说非常重要。 首先,API接口测试工具的一个特…

【uniapp】学习之【生命周期】

uniapp生命周期 uni-app框架的生命周期分为两种 : 应用中的生命周期 和 页面内的生命周期 uni-app 应用生命周期 uni-app 页面生命周期