文章目录

  • 1 效果
  • 2 思路
  • 3 实现代码
  • 4 扩展
  • 4.1 RGB888
  • 4.2 Grayscale16
  • 5 实验数据

1 效果

显示效果:

二值化后的图片数据:
原始数据信息:

\x00\x1F\x8F\xFF\xFF\xFF\xFF\xFF\xE0\x00\x01\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF0\x00\x0F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF0\x00?\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF0\x00?\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x0F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x1F\xFF\xFF\xFF\xFF\xFC\x01\xFF\xFF\xFF\x1F\xFF\xFF\xFF\xFF\xE0\x00?\xFF\xFF\x07\xFF\xFF\xFF\xFF\x00\xF8\x0F\xFF\xFF\x07\xFF\xFF\xFF\xFE\x0E\x03\x83\xFF\xFF\x03\xFF\xFF\xFF\xF8 \x00"“a\xFF\xFF\x01\xFF\xFF\xFF\xF0\xC0\x00\x18\xFF\xFF\x00\xFF\xFF\xFF\xE1\x07\x8F\f\x7F\xFF\x00?\xFF\xFF\xC6\r\x9F\x06?\xFF\x00\x7F\xFF\xFF\xCC\x19\x99\x81\x1F\xFF\x01\xFF\xFF\xFF\x88\f\x91\x00\x8F\xFE\x03\xFF\xFF\xFF\x11\xCC\x93\x10\x8F\xFF\x0F\xFF\xFF\xFF#\xC0\x02>G\xFF?\xFF\xFF\xFE”`\xE0"“fG\xFF?\xFF\xFF\xFEG\x02\f\x06#\xBF?\xFF\xFF\xFE”"C\x88\x02\f#\xFF\x7F\xFF\xFF\xFC@\x11\xC1\x18"“3\xFF\xFF\xFF\xFF\xFC\x80\x03\xC8\x00\x13\xFF\x07\xFF\xFF\xFC\x8E \f\x80\x11\xFF\x07\xFF\xFF\xFC\x98\fL\x9F\x11\xFF\x03\xFF\xFF\xFC\x90\f\xE0\x83\x11\xFF\x00\x7F\xFF\xFC\x98\f\xE0\x81\x91\xFF\x00?\xFF\xFC\x8E\bL\x81\x91\xFF\x00?\xFF\xFC\x80 \f\x0F\x11\xFF\x00\x7F\xFF\xFC\x80\x03\x98\x00\x11\xFF\x00\x7F\xFF\xFC\x83\x11\x80\x00\x03\xFF\x00\xFF\xFF\xFC”"F\b\x00"“0\x03\xFF\x00\xFF\xFF\xFE”“D@\x00\x1C\x03\xFF\x00\xFF\xFF\xFE”"D\xC0@\x8C\x07\xFF\x01\xFF\xFF\xFE’\x80\x00\xCC\x07\xFF\x01\xFF\xFF\xFF\x00\x10\x00x\x07\xFF\x0F\xFF\xFF\xFF\x10""0&\x00\x0F\xFC\x04\x7F\xFF\xFF\x88"“2&\x00\x0F\xFC\xFF\xFF\xFF\xFF\xC4\x12”\x00\x1F\xFE\xFF\xFF\xFF\xFF\xC2\x1C<\x00?\xFF\xFF\xFF\xFF\xFF\xE1\x00\x00\x00\x7F\xFF\xFF\xFF\xFF\xFF\xF0@\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\x00\x01\xFF\xFF\xFF\xFF\xFF\xFF\xFE\x01\xF0\x03\xFF\xFF\xFF\xFF\x80\xFF\xFF\x00\x00\x0F\xFF\xFF\xFF\xC0\x0F\xFF\xFF\xE0\x00?\xFF\xFF\xF8\x01\x7F\xF1\xFF\xFC\x03\xFF\xFF\xFF\x00?\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\x07\xFF\xFE\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x00\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFE\x00\x00\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\x00\x7F\xFF\xFF\xFF\xFF\xE0\xFF\xF0\x00\x00\x7F\xFF\xFF\xFF\xFC\x00\xFF\x80\x00\x00?\xFF\xFF\xFF\xC0\x00\xFE\x00\x00\x00?\xFF\xFF\xF8\x00\x00\xF8\x00\x00\x00?\xFF\xFF\x00\x00\x00\xC0\x00\x00\x00\x1F\xFF\xF0\x00\x00\x00\x80\x00\x00\x00\x1F\xFE\x00\x00\x00\x00

转换为16进制后显示的图片数据信息:
00 1F 8F FF FF FF FF FF E0 00 01 FF FF FF FF FF FF FF F0 00 0F FF FF FF FF FF FF FF F0 00 3F FF FF FF FF FF FF FF F0 00 3F FF FF FF FF FF FF FF FF 7F 0F FF FF FF FF FF FF FF FF F8 1F FF FF FF FF FC 01 FF FF FF 1F FF FF FF FF E0 00 3F FF FF 07 FF FF FF FF 00 F8 0F FF FF 07 FF FF FF FE 0E 03 83 FF FF 03 FF FF FF F8 20 00 61 FF FF 01 FF FF FF F0 C0 00 18 FF FF 00 FF FF FF E1 07 8F 0C 7F FF 00 3F FF FF C6 0D 9F 06 3F FF 00 7F FF FF CC 19 99 81 1F FF 01 FF FF FF 88 0C 91 00 8F FE 03 FF FF FF 11 CC 93 10 8F FF 0F FF FF FF 23 C0 02 3E 47 FF 3F FF FF FE 22 60 E0 66 47 FF 3F FF FF FE 47 02 0C 06 23 BF 3F FF FF FE 43 88 02 0C 23 FF 7F FF FF FC 40 11 C1 18 33 FF FF FF FF FC 80 03 C8 00 13 FF 07 FF FF FC 8E 20 0C 80 11 FF 07 FF FF FC 98 0C 4C 9F 11 FF 03 FF FF FC 90 0C E0 83 11 FF 00 7F FF FC 98 0C E0 81 91 FF 00 3F FF FC 8E 08 4C 81 91 FF 00 3F FF FC 80 20 0C 0F 11 FF 00 7F FF FC 80 03 98 00 11 FF 00 7F FF FC 83 11 80 00 03 FF 00 FF FF FC 46 08 00 30 03 FF 00 FF FF FE 44 40 00 1C 03 FF 00 FF FF FE 44 C0 40 8C 07 FF 01 FF FF FE 27 80 00 CC 07 FF 01 FF FF FF 00 10 00 78 07 FF 0F FF FF FF 10 30 26 00 0F FC 04 7F FF FF 88 32 26 00 0F FC FF FF FF FF C4 12 22 00 1F FE FF FF FF FF C2 1C 3C 00 3F FF FF FF FF FF E1 00 00 00 7F FF FF FF FF FF F0 40 00 00 FF FF FF FF FF FF F8 00 00 01 FF FF FF FF FF FF FE 01 F0 03 FF FF FF FF 80 FF FF 00 00 0F FF FF FF C0 0F FF FF E0 00 3F FF FF F8 01 7F F1 FF FC 03 FF FF FF 00 3F FF 00 FF FF FF FF FF FF 07 FF FE 00 FF FF FF FF FF FF FF FF F8 00 FF FF FF FF FF FF FF FF E0 00 FF FF FF FF FF FF FF FF 80 00 7F FF FF FF FF FF FF FE 00 00 7F FF FF FF FF FF FF F8 00 00 7F FF FF FF FF E0 FF F0 00 00 7F FF FF FF FC 00 FF 80 00 00 3F FF FF FF C0 00 FE 00 00 00 3F FF FF F8 00 00 F8 00 00 00 3F FF FF 00 00 00 C0 00 00 00 1F FF F0 00 00 00 80 00 00 00 1F FE 00 00 00 00

2 思路

二值化后的图片数据为:每像素占1bite(1位)。
为了显示,我们需要把图片信息还原为软件可以显示的格式,比如我现在还原的格式就是QImage::Format_Grayscale8,即每像素占8位的格式。

背景:二值化的图片信息是每像素占一位。0代表黑,1代表白。
方法:

  • 1 根据图片数据的信息,图片占600的字节,即4800位,因此创建一个一维的容量为4800无符号数组,
  • 2 读取图片每位的像素信息,
  • 3 从低位到高位与1进行与操作(使用逻辑移位>>)
    • 如果是1,则无符号数组中填充0xFF,两个十六进制数(即8位),即把1位每像素还原为8位每像素;
    • 如果是0,则无符号数组中填充0x00;
    • 填充的方法为:
      • 法1:根据宽、高分别为80和60,每一行数据代表一个宽,行数代表高,每一行满80(宽的个数==80),则换下一行(即高个数加1),在数组的位置标示为:宽长度(80)* 高个数 + 宽个数【用一位数组标示二维数组】
      • 法2:0到4800依次填充
  • 4 根据图片的格式显示图片

3 实现代码

读取数据

    //读数据到bufferQFile file("/Users/macbookpro/Documents/test9.txt");QByteArray imgData;if(file.open(QIODevice::ReadOnly)){//只读、二进制方式imgData = file.readAll();file.close();} //转换为无符号数组unsigned char* tempImgContent = reinterpret_cast<unsigned char*>(imgData.data());int width = 80;int height = 60;unsigned char *binarydata = new unsigned char[width * height];// 每字节8位

法二:

   int pixCnt = 0;for(int i = 0; i < 600;i++){for(int j = 7; j >=0;j--){if(((tempImgContent[i]>>(j)) & 0x01) == 1){binarydata[pixCnt++] =  0xFF;//白(两个4位/一个16进制,共8位)}else{binarydata[pixCnt++] = 0x00;//黑}}}QImage imageData(binarydata, 80, 60,  QImage::Format_Grayscale8);

法一:

   int widthCnt = 0, heightCnt = 0;for(int i = 0; i < 600;i++){for(int j = 7; j >=0;j--){if(((tempImgContent[i]>>(j)) & 0x01) == 1){binarydata[heightCnt * 80 + widthCnt] =  0xFF;//白(两个4位/一个16进制,4位)widthCnt++;if(widthCnt == 80){heightCnt++;widthCnt = 0;}}else{binarydata[heightCnt * 80 + widthCnt] = 0x00;//黑widthCnt++;if(widthCnt == 80){heightCnt++;widthCnt = 0;}}}}QImage imageData(binarydata, 80, 60,  QImage::Format_Grayscale8);

4 扩展

4.1 RGB888

把二值化的图片数据转位24位每像素格式图片(即RGB每8位一像素)显示

思路:

  • 1 创建一个二维数组[高][宽];
  • 2 读取图片数据,给二维数组的每个元素赋值,与1进行与操作,相同取1,不同取0;
  • 3,根据宽、高、数据格式(QImage::Format_RGB888),使用构造函数创建QImage对象,
  • 4, 设置每个像素的值,如果是0,则赋予QColor(0,0,0),否则赋予QColor(255,255,255),同时赋予位置。
  • 5,调用QPixmap显示图片。

实现代码:
读取数据:

    //读数据到bufferQFile file("/Users/macbookpro/Documents/test9.txt");QByteArray imgData;if(file.open(QIODevice::ReadOnly)){//只读、二进制方式imgData = file.readAll();file.close();}
```cpp

存储到二维无符号数组

    unsigned char *msrc = tempImgContent;unsigned char tmpsrc;unsigned char pix[60][80];//创建二维数组 高和宽for (int i = 0;i < 60; i++) {for(int j = 0; j < 80; j += 8) {tmpsrc = *msrc++;pix[i][j+0] = (tmpsrc >> 7) & 0x01;//与1进行与操作,相同取1,不同取0pix[i][j+1] = (tmpsrc >> 6) & 0x01;pix[i][j+2] = (tmpsrc >> 5) & 0x01;pix[i][j+3] = (tmpsrc >> 4) & 0x01;pix[i][j+4] = (tmpsrc >> 3) & 0x01;pix[i][j+5] = (tmpsrc >> 2) & 0x01;pix[i][j+6] = (tmpsrc >> 1) & 0x01;pix[i][j+7] = (tmpsrc >> 0) & 0x01;}}

根据图片格式绘制图片:

 int nWidth = 80, nHeight = 60;QImage imageData(nWidth, nHeight, QImage::Format_RGB888);for (int x = 0;x < 60;x++) {for (int y = 0;y < 80;y++) {if(pix[x][y] == 0){//宽高,rgb三色imageData.setPixel(y, x, QColor(0, 0, 0).rgb());}else{imageData.setPixel(y, x, QColor(255, 255, 255).rgb());}}}

显示图片:

  QPixmap resImage = QPixmap::fromImage(imageData);resImage.scaled(ui->imageLabel->size(), Qt::IgnoreAspectRatio);//图片缩放到和label一样大小,并且改变图片比列ui->imageLabel->setScaledContents(true);//label可变属性ui->imageLabel->setPixmap(resImage);

4.2 Grayscale16

把二值化的图片转换为 QImage::Format_Grayscale16格式(16位每像素)


int widthCnt = 0, heightCnt = 0;for(int i = 0; i < 600;i++){for(int j = 7; j >=0;j--){if(((tempImgContent[i]>>(j)) & 0x01) == 1){binarydata[heightCnt * 160 + widthCnt*2] =  0xFF;//白(两个4位/一个16进制,8位)binarydata[heightCnt * 160 + widthCnt*2+1] =  0xFF;//白(两个4位/一个16进制,8位)widthCnt++;if(widthCnt == 160){heightCnt++;widthCnt = 0;}}else{binarydata[heightCnt * 160 + widthCnt*2] = 0x00;//黑binarydata[heightCnt * 160 + widthCnt*2+1] =  0x00;//黑(两个4位/一个16进制,8位)widthCnt++;if(widthCnt == 160){heightCnt++;widthCnt = 0;}}}}QImage imageData(binarydata, 80, 60,  QImage::Format_Grayscale16);

5 实验数据

链接:https://pan.baidu.com/s/1-ZfxiXacSiLCOcxlcBilWw 密码:aqm6

二值化图片数据解码显示(Grayscale8、Grayscale16、RGB888)————附带Qt版完整代码相关推荐

  1. Matlab批量二值化图片保存及基本操作

    1.批量二值化及保存 clc; clear; file_path = 'E:\spyder\spineunet-1\data\train\image\';% 图像文件夹路径 img_path_list ...

  2. 还在纠结通道数、位深度?实验带你看懂关于灰度图像,二值化图像,彩色图像、图片通道数,位深度的全部内容

    数据加载相关 前言 图片的通道数.位深度 单通道 三通道 四通道 通道数之间的转化 二值化图像 小结 灰度图像 小结 pillow库 相关全部代码 前言 首先我们都知道,图像是由一个个像素点组成的.图 ...

  3. python 图像二值化

    自适应二值化,高斯加权二值化: image =cv2.imread(r'E:\data\barcode\test\1009_11\test\blur\509915979678918664.jpg', ...

  4. OTSU_图像二值化分割阈值的算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

  5. matlab 图像二值化 后0、1像素的个数统计

    目标: 批量处理RGB图像,对其进行二值化处理(需要考虑二值化的阈值设置,此处不展开) 统计二值化之后,各个黑白图像中0.1 的像素点数目 使用折线图的方式,展示出统计的结果 首先进行输入文件夹 与输 ...

  6. java入门之 美图相机(原图、灰度、二值化、马赛克、融合、轮廓获取)

    编写美图相机时,我们首先需要了解图片再计算机中的存储形式,详情可见http://t.csdn.cn/MgOfO 目录 <1>创建显示图片的主界面 1.添加窗体,用数列添加按钮,设置窗体可视 ...

  7. OV2640灰度处理和软件二值化

    图像灰度化 1.分量法 2.最大值法 3.平均法 4.加权平衡法 计算灰度值流程 1.设置OV2640输出的数据为YUV422格式(16位数据的高字节为Y亮度值) void OV2640_YUV422 ...

  8. OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu

    阈值化函数: double cvThreshold(constCvArr* src, CvArr* dst, double threshold, double max_value,int thresh ...

  9. opencv 车牌识别---新能源车牌处理(二值化后按位取反)

    场景: 在对车牌号进行识别时,不能识别出新能源车牌的车牌号. 问题原因:   因为我们的识别模板都是黑底白字,新能源的车牌进行二值化处理后都是白地黑字. 模板: 新能源车牌原图(部分): 新能源车牌二 ...

最新文章

  1. 敏捷冲刺每日报告四(Java-Team)
  2. linux-glibc内存管理小结2(内存相关系统调用的实现)
  3. 代码神器:拒绝重复编码,这款IDEA插件了解一下.....
  4. 旷视科技 Face++ 全资收购艾瑞思机器人 正式进军机器人业务
  5. win7 将文件的背景色改为绿色
  6. 皮一皮:年轻人真会玩...
  7. Python《爬虫收集》
  8. 数据结构之队列的应用(实现斐波那契数列)
  9. 【VB】StrConv函数.
  10. 用Java来写常见的排序算法
  11. Oracle开发实战经典教程(教学视频)
  12. RX8010/RX-8025T测试说明
  13. 企业微信和钉钉的区别以及企业微信的功能
  14. python 拆分excel单元格_如何用Python拆分合并后的Excel单元格?
  15. C# 30分钟完成百度人脸识别——进阶篇(文末附源码)
  16. 显示器颜色偏色的排查过程(偏黄、偏红、偏蓝、偏绿等)
  17. 2022极米投影和米家投影哪个好 家用智能投影仪对比
  18. LTE学习理解系列——TDD LTE信源指定时隙配比设置
  19. ChatGPT翻译怎么样-ChatGPT批量翻译工具软件
  20. TortoiseSVN安装最新版,设置中文;并修改比对工具为BeyondCompare

热门文章

  1. 可以在家庭DVD影碟机上播放的HDVD光盘简易制作步骤
  2. 有万能PDF格式转换器吗
  3. 华为端口聚合命令_华为S5735交换机基本设置-端口聚合lacp
  4. rbac java框架_jCasbin:支持MAC、RBAC、ABAC多种模型的Java权限管理框架
  5. linux和windows关闭端口号的命令
  6. 【电气专业知识问答】问:大电流滑环和电刷的选用、定期检查应关注的问题和注意事项是什么?
  7. 腾讯面试,面试官第一个问题是Int占多少字节,程序员不知所措
  8. MCGS昆仑通态触摸屏导入博途自定义数据类型和DB块变量的具体方法演示
  9. gif透明背景动画_PS教程:制作动态界面展示GIF动画效果
  10. 2020 BAT大厂数据开发面试经验:“高频面经”之大数据研发篇