日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/29 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二值化图片数据解码显示(Grayscale8、Grayscale16、RGB888)————附带Qt版完整代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1 效果
  • 2 思路
  • 3 實現(xiàn)代碼
  • 4 擴展
  • 4.1 RGB888
  • 4.2 Grayscale16
  • 5 實驗數(shù)據(jù)

1 效果

顯示效果:

二值化后的圖片數(shù)據(jù):
原始數(shù)據(jù)信息:

\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

轉(zhuǎn)換為16進制后顯示的圖片數(shù)據(jù)信息:
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 思路

二值化后的圖片數(shù)據(jù)為:每像素占1bite(1位)。
為了顯示,我們需要把圖片信息還原為軟件可以顯示的格式,比如我現(xiàn)在還原的格式就是QImage::Format_Grayscale8,即每像素占8位的格式。

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

  • 1 根據(jù)圖片數(shù)據(jù)的信息,圖片占600的字節(jié),即4800位,因此創(chuàng)建一個一維的容量為4800無符號數(shù)組,
  • 2 讀取圖片每位的像素信息,
  • 3 從低位到高位與1進行與操作(使用邏輯移位>>)
    • 如果是1,則無符號數(shù)組中填充0xFF,兩個十六進制數(shù)(即8位),即把1位每像素還原為8位每像素;
    • 如果是0,則無符號數(shù)組中填充0x00;
    • 填充的方法為:
      • 法1:根據(jù)寬、高分別為80和60,每一行數(shù)據(jù)代表一個寬,行數(shù)代表高,每一行滿80(寬的個數(shù)==80),則換下一行(即高個數(shù)加1),在數(shù)組的位置標示為:寬長度(80)* 高個數(shù) + 寬個數(shù)【用一位數(shù)組標示二維數(shù)組】
      • 法2:0到4800依次填充
  • 4 根據(jù)圖片的格式顯示圖片

3 實現(xiàn)代碼

讀取數(shù)據(jù)

//讀數(shù)據(jù)到bufferQFile file("/Users/macbookpro/Documents/test9.txt");QByteArray imgData;if(file.open(QIODevice::ReadOnly)){//只讀、二進制方式imgData = file.readAll();file.close();} //轉(zhuǎn)換為無符號數(shù)組unsigned char* tempImgContent = reinterpret_cast<unsigned char*>(imgData.data());int width = 80;int height = 60;unsigned char *binarydata = new unsigned char[width * height];// 每字節(jié)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

把二值化的圖片數(shù)據(jù)轉(zhuǎn)位24位每像素格式圖片(即RGB每8位一像素)顯示

思路:

  • 1 創(chuàng)建一個二維數(shù)組[高][寬];
  • 2 讀取圖片數(shù)據(jù),給二維數(shù)組的每個元素賦值,與1進行與操作,相同取1,不同取0;
  • 3,根據(jù)寬、高、數(shù)據(jù)格式(QImage::Format_RGB888),使用構(gòu)造函數(shù)創(chuàng)建QImage對象,
  • 4, 設(shè)置每個像素的值,如果是0,則賦予QColor(0,0,0),否則賦予QColor(255,255,255),同時賦予位置。
  • 5,調(diào)用QPixmap顯示圖片。

實現(xiàn)代碼:
讀取數(shù)據(jù):

//讀數(shù)據(jù)到bufferQFile file("/Users/macbookpro/Documents/test9.txt");QByteArray imgData;if(file.open(QIODevice::ReadOnly)){//只讀、二進制方式imgData = file.readAll();file.close();} ```cpp

存儲到二維無符號數(shù)組

unsigned char *msrc = tempImgContent;unsigned char tmpsrc;unsigned char pix[60][80];//創(chuàng)建二維數(shù)組 高和寬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;}}

根據(jù)圖片格式繪制圖片:

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

把二值化的圖片轉(zhuǎn)換為 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 實驗數(shù)據(jù)

鏈接:https://pan.baidu.com/s/1-ZfxiXacSiLCOcxlcBilWw 密碼:aqm6

總結(jié)

以上是生活随笔為你收集整理的二值化图片数据解码显示(Grayscale8、Grayscale16、RGB888)————附带Qt版完整代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。