raw图G通道

读取raw图,分通道处理再组合(rggb) 通过这个流程,你可以读取、处理并保存RGGB格式的12bit RAW图像。你可以根据需要调整线性模型的参数以实现不同的图像处理效果。 阅读详情
import numpy as np
import matplotlib.pyplot as plt


def extract_g_channel_info(raw_path, width, height, bit_depth=12, bayer_pattern='RGGB'):
    """
    从拜耳阵列RAW图中提取G通道信息
    :return: 原始数组、G通道掩码、最大亮度值
    """
    # 读取RAW数据并解析为数组
    dtype = np.uint16
    with open(raw_path, 'rb') as f:
        raw_data = f.read()
    raw_array = np.frombuffer(raw_data, dtype=dtype).reshape(height, width)

    # 修正位深(去除无效高位)
    max_value = (1 << bit_depth) - 1
    raw_array = np.clip(raw_array, 0, max_value)

    # 创建G通道掩码(True表示该位置是G通道)
    g_mask = np.zeros((height, width), dtype=bool)

    # 根据拜耳阵列模式标记G通道位置
    if bayer_pattern == 'RGGB':
        # G通道位置:(偶数行, 奇数列) 和 (奇数行, 偶数列)
        g_mask[::2, 1::2] = True  # 偶数行,奇数列
        g_mask[1::2, ::2] = True  # 奇数行,偶数列
    elif bayer_pattern == 'BGGR':
        # G通道位置:(偶数行, 偶数列) 和 (奇数行, 奇数列)
        g_mask[::2, ::2] = True
        g_mask[1::2, 1::2] = True
    elif bayer_pattern == 'GRBG':
        # G通道位置:(偶数行, 偶数列) 和 (奇数行, 奇数列)
        g_mask[::2, ::2] = True
        g_mask[1::2, 1::2] = True
    elif bayer_pattern == 'GBRG':
        # G通道位置:(偶数行, 奇数列) 和 (奇数行, 偶数列)
        g_mask[::2, 1::2] = True
        g_mask[1::2, ::2] = True
    else:
        raise ValueError(f"不支持的拜耳模式:{bayer_pattern}")

    # 计算整体G通道平均亮度
    all_g_values = raw_array[g_mask]
    print(all_g_values)
    avg_g_brightness = np.mean(all_g_values)*255 / max_value

    return raw_array, g_mask, max_value, avg_g_brightness


def calculate_300x300_g_mean(raw_array, g_mask, center_x, center_y, max_val):
    """
    以指定像素为中心,计算300x300区域内G通道的平均值
    直接在原始拜耳阵列上操作,避免填充0值的影响
    """
    height, width = raw_array.shape

    # 计算300x300区域的边界(确保不超出图像范围)
    half_size = 150  # 300/2 = 150
    start_x = max(0, center_x - half_size)
    end_x = min(width, center_x + half_size)
    start_y = max(0, center_y - half_size)
    end_y = min(height, center_y + half_size)

    # 提取区域内的G通道像素
    region_mask = g_mask[start_y:end_y, start_x:end_x]
    region_g_values = raw_array[start_y:end_y, start_x:end_x][region_mask]

    if len(region_g_values) == 0:
        return 0, 0, (start_x, end_x, start_y, end_y), 0

    # 计算平均值
    raw_mean = np.mean(region_g_values)
    normalized_mean = raw_mean / max_val
    normalized_mean = normalized_mean*255
    # 打印详细信息(帮助调试)
    print(f"\n300x300区域范围: X[{start_x}:{end_x}], Y[{start_y}:{end_y}]")
    print(f"区域大小: {end_y - start_y}x{end_x - start_x}")
    print(f"区域内G通道像素总数: {len(region_g_values)} (约占区域的50%)")
    print(f"区域内G通道亮度范围: {np.min(region_g_values)} ~ {np.max(region_g_values)}")
    print(f"区域内G通道平均亮度(原始值): {raw_mean:.2f}")
    print(f"区域内G通道平均亮度(归一化0~1): {normalized_mean:.4f}")

    return raw_mean, normalized_mean, (start_x, end_x, start_y, end_y), len(region_g_values)


# 示例使用
if __name__ == "__main__":
    raw_path = "D:\\2.raw"
    width = 5248  # 图像宽度
    height = 5248  # 图像高度
    bit_depth = 16  # 位深(16bit)
    bayer_pattern = 'RGGB'  # 拜耳模式

    # 提取G通道信息
    raw_array, g_mask, max_val, avg_brightness = extract_g_channel_info(
        raw_path, width, height, bit_depth, bayer_pattern
    )

    # 输出整体结果
    print(f"整体G通道平均亮度(原始值):{avg_brightness * max_val:.2f}")
    print(f"整体G通道平均亮度(0~1):{avg_brightness:.4f}")
    print(f"G通道亮度值范围:0 ~ {max_val}")

    # 指定中心像素位置(示例:图像中心)
    center_x, center_y = width // 2, height // 2
    # 也可以指定其他位置,例如:center_x, center_y = 1000, 1000

    print(f"\n计算以({center_x}, {center_y})为中心的300x300区域平均值...")
    region_raw_mean, region_norm_mean, region_coords, g_count = calculate_300x300_g_mean(
        raw_array, g_mask, center_x, center_y, max_val
    )

    # 可视化(可选,大图像可能需要较长时间)
    if g_count > 0:
        start_x, end_x, start_y, end_y = region_coords

        # 提取区域数据用于可视化
        region_data = raw_array[start_y:end_y, start_x:end_x]
        # 为了显示清晰,将G通道像素值放大,非G通道像素设为0
        region_visual = np.where(g_mask[start_y:end_y, start_x:end_x], region_data, 0)

        plt.figure(figsize=(12, 10))

        # 显示整体G通道分布(采样显示,避免内存问题)
        plt.subplot(121)
        # 对大图像进行下采样显示
        step = max(1, width // 1000)  # 根据宽度动态调整采样步长
        plt.imshow(raw_array[::step, ::step] * g_mask[::step, ::step],
                   cmap='gray', vmin=0, vmax=max_val)
        plt.colorbar(label=f'G通道亮度值(0~{max_val})')
        plt.title(f'整体G通道分布(平均:{avg_brightness:.4f})')
        plt.axis('off')

        # 显示局部300x300区域的G通道分布
        plt.subplot(122)
        plt.imshow(region_visual, cmap='gray', vmin=0, vmax=max_val)
        plt.colorbar(label=f'G通道亮度值(0~{max_val})')
        plt.title(f'300x300区域G通道分布(平均:{region_norm_mean:.4f})')
        plt.axis('off')

        plt.tight_layout()
        plt.show()
用opencv 与qt打开raw图,以及四通道输出 qt做的程序界面 opencv打开raw图 以下为部分须知 1:raw图路径获取 ,此部分为qt内容,此为相对可更改的路径,如果需要绝对路径可直接定义filepath 路径名称 QString filepath=QFileDialog::getOpenFileName();   FILE *fp = NULL;   QByteArray byte=filepath.toLatin1() 阅读详情

相关推荐

RAW 图、Bayer 图、JPEG、PNG、BMP、TIFF 图像格式

RAW 格式是一种未经处理、未压缩的图像文件格式,它记录了图像传感器捕捉到的原始数据,包含了从相机传感器上直接获得的每个像素的光电转换值。Bayer 图是基于 Bayer 滤镜阵列采集得到的图像数据格式。在彩色图像传感器中,为了使用单传感器采集彩色信息,通常会在传感器上覆盖一层 Bayer 滤镜,该滤镜由红(R)、绿(G)、蓝(B)三种颜色的滤光片按特定规律排列组成,常见的排列方式是 2x2 的单元(GR、GB;RB)重复排列,其中绿色滤光片的数量是红色和蓝色滤光片的两倍,因为人眼对绿色更敏感。

doubleintfloat的博客 1451

RAW图像简单可视化以及png、jpg的区别

可视化的图像整体偏绿。

蜡笔小晴 681

利用opencv将raw转换为rgb

最近工作中碰到将.raw格式文件转换为彩图格式文件。待转换的.raw格式文件不带有图像的宽高等信息,只有图像像素值信息,利用opencv接口无法直接读取。网上查的方法都无法满足我的需求,经过各种尝试终于成功了。因此,将该格式下的raw文件的转换方法总结下,给自己留个笔记,也希望对opencv的初学者有所帮助。 raw数据是大多数相机(单板sensor)的原始图像数据,与像.bmp,.jpg等格式

zhenhai308的专栏 1万+

python中open的“r”和“rb”的区别,encoding

r是读取人工书写的数据,书写的时候是什么样子,读出来就是什么样。 rb是读取二进制文件,非人工书写的数据如.jpeg等这些。 另外encoding可以指定解码格式,utf-8是现在的主流编码方式,如果没有指定encoding 的方式那么根据python版本的不同会有不同的解码方式,Python3中是utf-8,而python2中是ascii。 ...

blue‘s blog 2万+

基于Python的RAW图像分通道处理实战:从RGGB分离到线性调优

本文详细介绍了基于Python的RAW图像分通道处理技术,重点解析了RGGB分通道处理的原理与实战应用。通过搭建Python环境、12bit RAW文件读取技巧、高级分通道处理技术及优化策略,帮助开发者实现从RAW图像分离到线性调优的全流程处理。文章还提供了常见问题排查指南和多帧RAW合成技术,适用于摄影后期、图像处理等领域。

weixin_30955617的博客 562

C++实现BMP转RAW

C++实现BMP转RAW 用C++做的第一个项目,把BMP格式图片转换成RAW格式。 要实现该功能,需要分成以下几个步骤:1、搞明白BMP格式和RAW格式图片的数据存储方式;2、用C++实现算法转换,并用MFC做出一个小工具; 一、解析BMP格式 关于BMP格式网上有大把的资料,我也是参考了许多相关文章。以下是部分文章链接 https://blog.youkuaiyun.com/imxiangzi/arti...

hd328329346的博客 6599

【摄像头与成像】长文详解RAW图的来龙去脉

本文承接上一篇《数字成像系统概述》,将继续延伸数字成像系统的相关概念,但在延伸之前需要详细了解作为整个系统输入的Raw图。作者 | Tony编辑 | 言有三本篇文章主要详...

hacker_long的专栏 3171

Android Camera RAW 图种类详解

Android Camera RAW 图详解摘要: RAW 图是传感器直接输出的原始图像数据,未经任何 ISP 处理,保留了完整的动态范围和色彩信息。它可分为五大类: 按色彩滤波阵列分:Bayer RAW(标准拜耳)、Quad Bayer RAW(四合一拜耳)、非拜耳和黑白 RAW 按位深分:8-16bit 不同精度格式 按存储格式分:MIPI RAW、DNG 标准和厂商私有格式 按处理阶段分:ISP 前、黑电平校正后等不同处理阶段 RAW 按用途分:相位对焦、人脸检测等专用 RAW 其中,Bayer RA

DU_YULIN的博客 182

基于Python的RAW图像分通道处理与RGGB重组实战

本文详细介绍了基于Python的RAW图像分通道处理与RGGB重组实战。通过解析RAW数据的拜耳阵列结构,指导读者使用NumPy等工具分离RGGB通道,应用线性模型进行白平衡、降噪等自定义处理,并最终重组为完整图像。文章提供了从环境搭建、核心代码到高级技巧的全流程指南,帮助开发者深入理解图像传感器底层原理,实现对原始图像数据的精细控制。

yog99的博客 442

汽车诊断服务(UDS——0x11服务解析)

ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。

从事汽车行业 979

Spring Boot Swagger未授权访问漏洞:原理、风险与修复方案详解

在微服务架构中,API文档管理是开发与运维的重要环节。Swagger作为RESTful API文档生成与调试的标准化工具,通过OpenAPI规范自动生成交互式接口文档,极大提升了开发效率。然而,其默认配置往往缺乏访问控制,导致文档端点直接暴露,形成未授权访问漏洞。从技术原理看,该漏洞源于Spring Boot等框架集成Swagger时,相关端点未纳入安全框架的拦截范围,攻击者可通过扫描常见路径获取完整的接口定义与数据结构。这不仅会造成敏感信息泄露,更可能成为越权操作、数据篡改等深度攻击的入口点。在工程实践中

weixin_42524171的博客 493

Python 将raw图pack成4通道及其逆运算unpack!

一般神经网络处理的数据都是数组,raw图数据读入时是单通道的数组,如(H, W);而基于raw数据的深度学习图像处理基本上都是将raw数据pack成4通道的数组,即每一个通道分别有 R, Gr, Gb, B像素值组成的,形如(4, H / 2, W / 2);然后再送进神经网络进行运算学习的。 下面是将raw数据(H, W),pack成4通道形式(4, H / 2, W / 2)的方法,以及其反向操作的方法。 一、将raw数据才成4通道: def pack_raw(raw): """ :pa

葉的博客 2798

Arcmap计算土方量教程

1. 创建现状TIN 结果数据: 2. 创建设计TIN 结果数据: 注意:现状TIN和设计TIN构建时候的坐标系不同,设置坐标系见最后的注意事项第1点,就是import(导入)那步骤,现状TIN构建时选择高程点数据或者等高线数据,设计TIN构建时候选择洱海面数据 3. TIN转栅格 改成你要存的数据库,注意中间不要有汉字 结果数据(设计TIN转栅格的同理) 4. 裁剪现状TIN转成的栅格 结果数据: 5. 计算土方量 结果数据: ...

欢迎关注,共同进步! 5014

opencv3.3 实现raw格式转灰度图或RGB图

.raw格式文件不带有图像的宽高等信息,只有图像像素值信息,利用opencv接口无法直接读取。 raw数据是大多数相机(单板sensor)的原始图像数据,与像.bmp,.jpg等格式的彩图相比,他的图像像素只有单个通道,即r,gr,gb和b中的任意一个(gr和gb可以理解为都是g通道)。因此,将raw数据转换为正常的彩图,就要补充图像像素点缺失的另外两个通道的值,对应的处理算法称为去马赛克(de...

zfjBIT的专栏 7299

excel wind插件使用_Python和wind的交互—在债券中的应用

个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...

weixin_39863918的博客 5328

OpenClaw人人养虾:接入即时通讯平台Zalo

通过 Zalo Official Account(OA,官方账号)API,可以将 OpenClaw 接入 Zalo,实现面向越南用户的自动化客服和互动。

王国平的博客 437

PS打开RAW图并查看像素点灰度值大小

1、PS打开RAW图 根据抓取的RAW图像大小设置好对应的图像尺寸和位数,打开图像。 2、查看raw图的像素点大小 由于抓取的RAW图像一般是单通道图像,故我们进行查看时候显示当前像素点的R、G、B值大小是相同的。 在PS中选择窗口——>信息即可对图像像素点灰度值大小进行查看。 3、对RAW进行简单调制 PS中的选择滤镜——>Camera Raw可以对RAW图像进行简单调整。 ...

ISP行业的忠实粉丝 7535

第4-4课:状态压缩与动态规划

什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...

oRbIt 的专栏 700

Image Signal Processing(ISP)-第一章-ISP基础以及Raw的读取显示

Image Signal Processing(ISP)-第一章-ISP基础以及Raw的读取显示 前阵子接到任务要学习并软件实现一个ISP,刚拿到任务时既兴奋又担心。兴奋又有很多知识要了解了,担心ISP太过复杂,自己不能胜任这个任务。不管怎么样,还是坚持尝试了近一个月,捣腾出一个小ISP。 从这篇文章开始,我将介绍整个ISP最基础的要求,并介绍如何软件实现这些最基础的要求。因为内容实在太多,此篇 ...

泡视界的博客 1万+

PyRoki:机器人运动学优化库入门教程

PyRoki:模块化机器人运动学优化工具包 本文介绍了PyRoki,一个模块化、可扩展且跨平台的机器人运动学优化工具包。PyRoki通过统一变量和成本函数接口,简化了逆运动学、轨迹优化和运动重定向等任务的实现,支持CPU、GPU和TPU加速。实验表明,PyRoki在批量逆运动学任务中比现有GPU加速库cuRobo快1.4-1.7倍,且收敛误差更低。其模块化设计支持快速集成新成本函数,并通过交互式可视化工具优化参数配置。PyRoki开源发布,为机器人运动优化提供了灵活高效的解决方案。

机器人控制与仿真应用 1290

3D结构光 vs TOF——手机厂商为何选择TOF方案?

3D视觉感知技术路线分析:结构光与TOF对比 3D视觉感知领域存在结构光和TOF两大主流技术。结构光基于三角定位法,精度高(毫米级)但工作距离短(<1.5米),适合人脸识别等近距离场景;TOF通过测量光脉冲飞行时间计算深度,精度中等(厘米级)但工作距离长(0.5-5米+),更适合AR导航等中远距离应用。手机厂商选型时考虑:前置认证选择结构光(如苹果FaceID),后置场景倾向TOF(安卓阵营),因后者更适配全面屏设计、环境适应性强且成本优势明显。两种技术互补共存,共同推动3D感知应用发展。

致力于lidar应用开发 111

RAW数据格式解析

RAM数据格式解析 Raw格式是sensor的输出格式,是未经处理过的数据,表示sensor接受 到的各种光的强度。 Raw数据在输出的时候是有一定的顺序的,一般为以下四种: 00: GR/BG 01:   RG/GB 10: BG/GR 11:   GB/RG 为什么每种情况里有两个G分量呢?这时因为人的眼睛对绿色比较敏感,所以增加了对绿色的采样。其中...

pro_houjibofa的博客 6037

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RAW、YUV、RGB、JPEG格式简介

文章目录1.RAW与YUV2.rawRGB、RGB和YUV数据格式与转换3.YUV、RGB、RAW DATA、JPEG 4种方式区别3.1 YUV、RGB、RAW DATA、JPEG 定义3.2 为何要拍摄RAW?3.3 JPEG格式有什么优点? 1.RAW与YUV 背景,可感受光强度的传感器可以制造出能拍出黑白照片(是灰度图)的相机。但如果需要彩色图像,这种技术就无能为力了,因为当时的传感器只能感知光的强度,而无法感知颜色,也就是频率或波段。如果想要获得不同波段的光,最直接的做法是加入不同颜色的滤镜,从而

yaoming168的专栏 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

论文阅读:Unprocessing Images for Learned Raw Denoising

前言 本文主要是对《Unprocessing Images for Learned Raw Denoising》论文进行部分翻译解读,如果有观点不对或者错误的地方还望谅解并指出。

qq_43711697的博客 1799

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

影像原始信息Raw的全方位解析

NA

m0_72053187的博客 2786
上一篇: python遇到异常流程
下一篇: 装饰器模式(C++python)
越甲八千
博客等级 码龄11年 2953粉丝 553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值