69 RGB图像转单色位图

YUV420存储为BMP和JPG图片 网上大多数关于YUV420的资料都是关于YUV420P的,很少有YUV420SP的,因为YUV420SP的UV是交错存放的,处理起来相对麻烦点,但是YUV420SP也是一种常见格式,因此,在这里,我将关于YUV420SP格式数据的处理总结下,方便有需要的同志。 一、YUV420格式数据介绍 YUV,分为三个分量,“Y”表示明亮度,也就是灰度值;“U"和”V"表示的则是色度,作用是描述影 阅读详情

1 前言

        前段时间搞了一下电子墨水屏显示项目,用的这款墨水屏不能直接显示彩色图、灰度图及二值图,需要将图像转换成单色位图才能显示。

        单色位图这还是第一次接触,后面看了资料了解到单色位图和二值图类似。二值图单个像素用8Bit存储,要么是0要么是255,而单色位图单个像素用1bit存储,要么是0要么是1,就存储空间来说,单色位图比二值图直接节省8倍空间,实属nice。

2 转换实验

        本次实验环境是在QT上弄的,对图像处理是直接操作像素实现的,将图像转为单色位图整体流程如下:

(1)加载图片;

        直接用QT的图像类QImage加载图像,并将图像缩放成分辨率为240*360图像。

//加载图像
orgimg->load(file_path);
//图像szie控制
QImage sImg = orgimg->scaled(240, 360).scaled(240, 360, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
//显示图像
ui->orgImglabel->setPixmap(QPixmap::fromImage(sImg));

(2)图像灰度化;

(3)图像二值化;

        将加载的RGB图像通过下述公式,将RGB图像转成灰度图。

Gray = (R*30 + G*59 + B*11 + 50) / 100

        在转换灰度图时,将每个像素与阈值比较,将像素二值化,取值0或255。 

//图像灰度化+二值化
for(int ni =0; ni<360;ni++)
{
    for(int nj=0;nj<240;nj++)
    {
       QColor clr = sImg.pixelColor(nj,ni);
       //通过RGB计算像素灰度值
       int nGray = (30*clr.red() + 59*clr.green() + 11*clr.blue())/100;

       //判定灰度值是否达到阈值,从而将图像二值化
       if(nGray>grayThreshold)
            nGray = 250;
       else
            nGray = 0;

        //二值化后的图像数据
        grayData[uPos++] = (uint8_t)nGray;

        //设置像素点的灰度值用以在上位机上显示
        grayimg->setPixel(nj,ni,nGray);
     }
}

(4)生成单色位图;

        在进行图像二值化的时,我们将像素保存 在grayData[]数组中,其数值要么就是0要么就是250,。在二值图转单位位图时,如果grayData[ni]是0,那么单色位图对应bit就是0,如果是250,那么bit就是1。也就是用1bit来表示白和黑,二值图转单色位图代码示例如下:

//存放位图的数组
uint8_t grayData2[240*360/8] = {0};
//二值化图像转单色位图
uPos = 0;
int nj = 7;

for(int ni=0;ni<240*360;ni++)
{
    //二值图1Byte一个像素,单色位图1bit一个像素
    //二值图每处理8个像素,单色位图保存1Byte数据
	if(ni%8==0 && ni!=0)
	{
		uPos++;
	}

    //grayData[ni] 是二值图像素数据
    //grayData2[uPos] 是单色位图像素数据保存数组
	grayData2[uPos] |= (grayData[ni]>128)?((uint8_t)(1<<nj)):((uint8_t)(0<<nj));

	if(nj>=1) 
    {
        nj--;
    }
	else 
    {
        nj =7;
    }
}

        转换后效果图如下,但可以单色位图其跟二值图显示效果是一样的,就是黑白图像,只是单色位图存储像素是用bit来表示,即存储空间不一样。

参考:

1.http://t.zoukankan.com/hfultrastrong-p-9250219.html

2.https://blog.youkuaiyun.com/weixin_44523062/article/details/112852165

3.http://t.zoukankan.com/yongdaimi-p-11131265.html

嵌入式GUI开发实战:SEGGER emWin 2D绘图API深度解析与应用指南 在嵌入式系统开发中,图形用户界面(GUI)是实现人机交互的核心。其底层依赖于高效的2D图形库,通过将复杂的像素操作抽象为统一的API,屏蔽了底层硬件差异,实现了跨平台的可移植性。2D图形库的核心价值在于,在资源受限的MCU上,通过优化的算法(如Bresenham画线算法、扫描线填充算法)和整数运算,平衡了图形表现力与执行效率,为智能设备、工业HMI等应用提供了流畅的视觉基础。具体到工程实践,以SEGGER emWin为代表的专业库,通过分层架构和状态机管理,提供了从基础图元绘制到高级Alpha混合的完备功能 阅读详情

相关推荐

qt qimage 获取rgb 图像转yuv教程(一)

在图像处理时,我们经常会取图像的rgb,然后把rgb, qt中图像处理一般是qimage,我们可以把普通的一张图片,提取出rgb 首先,可以用QLabel 显示图像 定义一个:QLabel *imageview; 定义一个:QImage image QPixmap pixmap = QPixmap::fromImage(image); //从QImage中获取像素map //QPixmap fitpixmap = pixmap.scaled(with, height, Qt::I...

全粘工程师 3670

Qt加载RGB内存数据,并显示彩色图

最近在做图像处理,需要将试验得到的数据转化成RGB,再显示到界面 顺便学习了如下三个知识点: RGB数据生成BMP位图 YUV 格式与 RGB 格式的相互转换公式总结(C++版) 将RGB数组在内存中压缩成JPEG文件 直接上Qt加载RGB图片数据代码:  for(int i = 0;i&lt;height;i++)         {             for(int j = ...

YBAdiam的博客 9871

【QT】高斯处理后的图像生成工具类(2)

picutil.h–图像生成 #ifndef PICUTIL_H #define PICUTIL_H #include <QPainter> #include <QFont> #include <QBrush> #include <QColor> #include <QPaintDevice> #include <QPaintEngine> #include <QPixmap> #include <QPainter

weixin_48618536的博客 752

Qt中的RGB转灰度图

view source print? 01 QImage ToGrayImage_triggered(QImage m_QImage) 02 { 03     QSize size=m_QImage.size();

koilin的专栏 3170

iOS PDF电子签章完全指南:从视觉签名到PKCS#7证书签名

电子签章是移动办公与无纸化流程中的关键环节,尤其在PDF文档处理场景中,如何实现合规且可验证的签名成为开发者关注的重点。PDFKit作为iOS平台原生解析框架,提供了页面渲染与注释能力,但真正的数字签名需要结合安全框架与PKCS#7标准。通过视觉签名(手写/印章图片)与证书签名两种路径,开发者可以根据业务对防篡改、身份验证及审计留痕的要求灵活选型。前者适合内部审批等快速留痕场景,后者适用于合同、招投标等对法律效力要求严格的场景。掌握PDF坐标换算、扁平化导出及ByteRange签名原理,能够有效提升iOS端

weixin_34101784的博客 377

Hierarchical Flow Partition(Top-down&&Bottom-up)

hierarchy flow是将设计切分成多个block,分别处理单个block,然后完成后,将它们进行拼接以完成最终的chip。一般划分为三个阶段:chip planning;physical budget就是pin assignmenthierarchy flow实现的方法有两种,一种是top-down,另一种是bottom-up,无论是哪种,都是都要通过flatten的方法分别全局范围进行优化实现。

qq_39493558的博客 3072

BMP文件格式实例分析

1. 以下为一个RGB565-16位BMP位图实际的部分数据: 00000000h: 42 4D 46 58 02 00 00 00 00 00 46 00 00 00 28 00 ; BMFX......6...(. 00000010h: 00 00 40 01 00 00 F0 00 00 00 01 00 10 00 03 00 ; ..@...?........ 000000...

helpbs 102

解决fetch_california_housing数据集403错误的三种实用方法

本文针对机器学习初学者加载fetch_california_housing数据集时常见的HTTPError 403: Forbidden错误,提供了三种经过实测的解决方案。详细介绍了手动下载与本地替换、修改源码下载路径以及配置网络访问策略的具体步骤,帮助用户根据自身网络环境和开发场景选择最佳方法,确保数据集顺利加载。

weixin_29074295的博客 550

Pillow 与 Tkinter 图像桥接:ImageTk 模块实战指南

`PIL.ImageTk` 是 Pillow(Python Imaging Library)中用于在 PIL 图像与 Tkinter 界面对象之间架设桥梁的模块,它支持从 PIL 图像创建和修改 Tkinter 的 `BitmapImage` 与 `PhotoImage` 对象。在开发基于 Tkinter 的桌面 GUI 应用(如看图器、图像标注工具、实时预览面板)时,本文介绍的 `ImageTk

gitblog_01060的博客 943

声音事件检测metric:PSDS

这项工作为多声道声音事件检测(SED)系统的性能评估定义了一个新的框架,它克服了传统的collar-based事件决定、事件F-cores和事件错误率的限制。拟议的框架引入了对事件检测的定义,该定义对标签的主观性更为稳健。它还采用了多声道接收器操作特性(ROC)曲线,以提供比F1分数更全面的系统性能洞察力,并建议将这些曲线简化为单一的多声道声音检测分数(PSDS),这允许系统独立于操作点(OPs)进行比较。所提出的方法还能更好地了解不同声音类别的数据偏差和分类稳定性。

Maestro_T的博客 2730

5分钟搞懂Paris公式:如何用裂纹扩展速率预测零件寿命(附Python代码示例)

本文详细介绍了Paris公式在裂纹扩展速率预测零件寿命中的应用,通过Python代码示例展示了从理论到实践的完整流程。文章涵盖了Paris公式的工程本质、寿命预测计算流程、几何修正因子选择以及实际案例演示,帮助工程师快速掌握这一关键技术。

weixin_29309475的博客 428

BMP图形文件分析类(c#)

1usingSystem;2usingJJBase.FILE;3namespaceJJBase.Image4{5/**////&lt;summary&gt;6///BMP的摘要说明。7///&lt;/summary&gt;8publicclassBMP9{1011publicBMP()12{13//14//TODO:在此处添加构造函数逻辑15//作者:梁俊杰16//时间:2005-9-2917//...

威尔软件 128

UNet 改进(27):结合SCSE注意力机制的UNet网络实现

本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层

2401_82355416的博客 415

性能实测:Halcon HObject与C# Bitmap互转,哪种方法最快?(附OpenCV方案对比)

本文深度评测了Halcon HObject与C# Bitmap图像互转的五种主流方案,包括直接内存拷贝、InterleaveChannels、通道分离、OpenCVSharp中介和并行化处理。通过严格的性能测试,为工业视觉开发者提供了数据驱动的选型建议,帮助优化系统实时性。测试结果显示,直接内存拷贝在单色图像处理中表现最优,而彩色图像则推荐使用Halcon原生的InterleaveChannels方法。

weixin_30565199的博客 340

12、知识图谱数据处理与推理全解析

本文深入解析了知识图谱中的数据处理与推理技术,涵盖SHACL的多种约束类型(如值约束、范围约束、字符串约束、逻辑约束等)及其在数据质量控制中的应用,并介绍了常用的SHACL工具与实际案例。文章对比了SPARQL与SHACL的特点,探讨了RDF(S)的局限性,引出表达能力更强的OWL和OWL2语言及其在语义网和生物医学等领域的应用。此外,还阐述了规则在知识表示中的作用,包括产生式规则和Datalog规则,并总结了知识图谱中推理的重要性与典型流程,为构建高质量、可推理的知识图谱提供了全面的技术指导。

zz67890的博客 135

RK+linux教程:RK3588 RGA硬件加速在YOLOv5图像预处理中的深度应用教程

摘要: 本教程深入解析了RK3588芯片的RGA硬件加速器在YOLOv5图像预处理中的应用。通过专用硬件设计,RGA支持图像缩放、边界填充等核心操作,结合零拷贝技术显著提升处理效率。重点分析了LetterBox算法的RGA实现,包括参数计算、边界填充和性能优化,并与传统CPU处理对比,展示了RGA在高分辨率图像处理中的优势。教程还提供了统一的预处理接口设计,便于在OpenCV与RGA方案间灵活切换,为RK3588平台的深度学习部署提供实用优化方案。

LXY_LOVE36的博客 976

计算机图形

1.计算机图形的表示方式: 在计算机中,图片是采用位图形式来实现的 单色位图(bmp):(白色)200*200=4万个像素点,8个字节是一byte,大概有5000byte,因为图片的头信息,和事件什么的都保存在图片里,实际图片大小为5.多kb(黑白,1个byte可以表示8个像素点0表示黑色,1表示白色) 256色位图,每一个像素点都有256中颜色,(256个组合不是256位,需要2的8次方个...

weixin_30588907的博客 198

Python爬虫实战:爬取携程旅游平台数据,我拆解了动态反爬+Cookie续命(附完整可运行代码)

反爬类型表现形式应对思路sign参数返回403/空数据逆向JS还原加密逻辑Cookie时效登录后1小时Cookie失效定时刷新Cookie/保存登录态行为检测爬取过快触发验证码模拟真人延时/随机点击IP封禁单IP爬取超50条数据被封付费代理池/降低请求频率爬取携程旅游平台数据的核心,不是“简单的HTTP请求”,而是“理解平台的反爬逻辑并合规适配”——从sign参数破解到Cookie维护,再到行为模拟,每一步都是对HTTP协议、前端加密、用户行为的深度理解。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1713

PT-9800PCN标签打印机二次开发:Python直连9100端口实现MES自动打印

工业自动化场景中,标签打印往往需要与MES、ERP等系统深度集成,而厂商自带的驱动和编辑软件难以满足动态数据、批量任务的灵活控制。Brother PT-9800PCN作为一款工业级标签打印机,支持Raster Command Set指令集,允许开发者通过9100端口直接发送栅格位图数据,从而摆脱Windows驱动和COM组件的限制。本文从打印机协议的原理出发,拆解初始化、栅格模式、数据块传输等关键指令,并结合Python与Pillow库,详细演示如何将中文字符、二维码等内容渲染为300dpi位图,计算行字节

weixin_34319111的博客 357

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

linkedin-skill-assessments-quizzes 项目实战:Adobe Photoshop 技能评估 116 题知识点全解析

本篇技术指南以开源仓库 linkedin-skill-assessments-quizzes 中的 [adobe-photoshop-quiz.md](https://link.gitcode.com/i/5fe0892a5f813a25f6a3c2723f5a02c4) 为骨架,完整收录并逐题解析 Adobe Photoshop 技能评估的 116 道真题。文章覆盖选区与抠图、图层与蒙版、Cam

gitblog_00719的博客 457

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

GUI Guider 1.6实战指南:LVGL嵌入式界面开发降维方案

LVGL作为轻量级嵌入式GUI框架,其核心价值在于高性能与低资源占用,但原生API面向程序员思维,导致硬件工程师在STM32等平台开发时频繁卡在坐标计算、内存管理、事件绑定等底层编码环节。GUI Guider通过可视化拖拽重构LVGL对象树,将界面开发从‘编程任务’转化为‘配置任务’,天然适配FreeRTOS任务调度,并自动生成符合LVGL v7.11规范的C代码。它不仅封装了字体导入(支持Unicode字符集精简与BPP对齐)、图片转换(ARGB8888/RGB565格式映射)等关键流程,更深度打通Cub

weixin_34187862的博客 250

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

将RGB转换为JPG格式到内存的代码

  前面有文章,将RGB格式转换为JPG文件。近来工作需要,需要RGB转换为JPG格式到内存。这事…… int rgb2jpgAction(struct jpeg_compress_struct* pCinfo, const char *pRgbData, const int width, const int height) { int depth = RGB_COUNT; ...

柳鲲鹏 7898

24位RGB数据保存为BMP图片

在做Qt与ffmpeg结合的视频播放器时,由于解码后是RGB24数据格式,不知道解码的数据是否正确,于是在网上找了很久才找到一个RGB24转bmp文件的方法,于是尝试了一下,发现生成的bmp文件是电影中的片段截图,才知道解码的RGB24数据是正确的,最终才成功用Qt显示出视频图像。 以下代码为转载的,原味地址:http://blog.youkuaiyun.com/wesleyluo/article/detai

BrianYi的专栏 7374

qt保存单色位图

qt 将图片保存为单色位图

sinat_33762356的博客 874
上一篇: 68 iso14443读卡入门记录
下一篇: 70 QDateTime时间戳转换有误
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值