资源简介
实现了对一幅BMP格式的图像进行二元霍夫曼编码和译码。
对一幅BMP格式的图像进行二元Fano编码、译码。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
unsigned char* pBmpBuf; //image read pointer
int bmpWidth; //bmpwidth
int bmpHeight; //bmpheight
int BibitCount; //bits per pixel
RGBQUAD* pColorTable; //palette pointer
BITMAPFILEHEADER* filehead;
BITMAPINFOHEADER* infohead;
char str[100]; //image file name/path
int lineByte; //bits per row
int k; //huffman point
//build the struct for Huffman coding
struct node
{
short lson = -1;
short rson = -1;
short num = 0;
short parent = -1;
int frequency = 0;
string coded;
};
node anode[2 * 256 - 1];
//get scale map information
bool readBmp(char* bmpname) {
FILE* fp = fopen(bmpname “rb“);
if (fp == 0)
{
cout << “未能找到指定文件“;
return false;
}
//skip file header
fseek(fp sizeof(BITMAPFILEHEADER) 0);
//read the bitmap information header
infohead = new BITMAPINFOHEADER;
fread(infohead sizeof(BITMAPINFOHEADER) 1 fp);
bmpHeight = infohead->biHeight;
bmpWidth = infohead->biWidth;
BibitCount = infohead->biBitCount;
lineByte = ceil(bmpWidth * BibitCount / 8 + 3) / 4 * 4;
//read the palette
if (BibitCount == 8)
{
pColorTable = new RGBQUAD[256];
fread(pColorTable sizeof(RGBQUAD) 256 fp);
}
cout << “1.头文件处理完成“< //Read pixel encoding
int n;
n = lineByte * bmpHeight;
pBmpBuf = new unsigned char[n];
fread(pBmpBuf 1 n fp);
fclose(fp);
cout << “2.成功读取“< return true;
}
//provide a sort and huffmam method
bool complare(node &anode node &b) {
return anode.frequency > b.frequency;
}
//Traverses the image pixels that the pointer points
bool sortnode(unsigned char *pBmpBufnode anode[])
{
for (int i = 0; i <= 255; i++)
{
anode[i].num = i;
}
for (int i = 0; i < bmpHeight*bmpWidth; i++)
{
anode[int(pBmpBuf[i])].frequency++;
}
sort(anodeanode+256complare);
cout << “3.排序中。。。。。“;
return true;
}
//find the two points with the least weight to construct Huffman
int selectmin(int aint k) {
for (int i = 0; i < 256+k; i++)
{
if (anode[i].parent == -1) {
a = i;
break;
}
}
for (int i = 0; i < 256+k ; i++)
{
if (anode[i].parent == -1 && anode[a].frequency > anode[i].frequency )
{
a = i;
}
}
anode[a].parent = -2;
return a;
}
//construct Huffmam
bool huffman(node anode[]) {
for (k = 256; k < 256*2-1; k++)
{
int a = 0;
int b = 0;
a = selectmin(a k - 256);
b = selectmin(b k - 256);
anode[k].frequency = anode[a].frequency + anode[b].frequency;
anode[a].parent = k;
anode[b].parent = k;
anode[k].lson = a;
anode[k].rson = b;
}
return true ;
}
string Coded[256];
//code the pixel by Huffman
bool coding(node anode[]string Coded[]) {
for (int i = 0; i < 256; i++)
{
in
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1756088 2019-05-25 22:41 哈夫曼编码bmp图像,费诺编码bmp图像.docx
文件 11246 2019-05-25 22:30 readbmp.cpp
----------- --------- ---------- ----- ----
1767334 2
- 上一篇:去哪网旅游景点数据集合
- 下一篇:LabView2018 安装教程
相关资源
- 飞歌安卓logotools工具支持1024X600分辨率
- Bmp图像反色处理
- Jpg图片转Bmp源代码
- linux-ffmpeg-3.3.1.tar.gz
- raw格式图像与bmp格式图像的转换
- win32画图程序 可保存bmp 截图
- 医学图像CT图像bmp格式
- bmp图像格式转换ppm,pgm
- JPGBMP转DCM(图像医疗格式)无源码
- 29张标准测试图像,bmp图像
- MNIST手写数字图片库,为bmp格式,共
- 指纹图像库180176
- bmp格式图片缩小
- freetype2+SDL+SDL_ttf源码包及字符串转b
- 图片格式批量转换器,支持从bmp,j
- stm32f4摄像头数据转bmp上传onenet.zip
- 虚拟IBMpowerPC安装AIX包1
- ico图标大全
- 软件开发常用图标
- AR人脸数据库,BMP和MAT格式
- 快速抠图,破解版,容易操作,图像
- 数字图像处理第三版图片BMP格式_CH1
- STM32+MPU6050+HMC5883L+BMP180姿态解算程序
- JPEG.BMP图像压缩算法(绝对物超所值)
- 数字图像处理第三版图片BMP格式CH05
- 数字图像处理第三版所有图片已转化
- dicom图像格式与bmp通用格式转换软件实
- 数据结构哈夫曼压缩文件
- BpmAnlyz一款超级猛的歌曲BPM计算器!我
- ISODATA聚类分析,对BMP图片操作
评论
共有 条评论