社区
C++ 语言
帖子详情
图像的压缩与解压过程???
fxyuer2004
2005-09-08 09:10:28
有谁会用C或则用C++编写图像的压缩与解压过程的程序啊!!??? 帮忙啊,有60分加啊,有会的英雄吗??,你会吗?动手吧!不要犹豫! 你行的!
...全文
461
13
打赏
收藏
图像的压缩与解压过程???
有谁会用C或则用C++编写图像的压缩与解压过程的程序啊!!??? 帮忙啊,有60分加啊,有会的英雄吗??,你会吗?动手吧!不要犹豫! 你行的!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fxyuer2004
2005-09-24
打赏
举报
回复
有损压缩的算法有吗?
fxyuer2004
2005-09-11
打赏
举报
回复
楼主,有没有完整的图象压缩程序啊,我想运行一下,看看结果!!!给我一个啊!!谢谢了,我刚在读大2.我对编程我好迷茫啊.有什么高招吗????
fxyuer2004
2005-09-11
打赏
举报
回复
好吧,我会把它看懂理解的,谢谢了
Jagen在路上
2005-09-11
打赏
举报
回复
好的算法就是你楼上的那些,但是如果想要理解,先学好高等数学。
fxyuer2004
2005-09-11
打赏
举报
回复
建议个好的算法啊,???
dreamer2k
2005-09-11
打赏
举报
回复
高招就是不要好高鹜远
踏实的学习
dreamer2k
2005-09-09
打赏
举报
回复
这个网上有很多,我做过小波变换压缩的,有损
上面的游程我也做过,不过对于图像不太好,建议采用离散余弦变换(DCT),这个是JPEG的核心
或者离散小波变换(DWT),用于JPEG2000
压缩算法成百上千,谁知道你要什么啊
Jagen在路上
2005-09-08
打赏
举报
回复
//===================================================================
inline BYTE * RLE_TGA_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, BYTE * OutBuffer) {
DWORD Data, Next ;
BYTE * pBak ;
register DWORD Count ;
iColorBit /= 8 ; // 转换为字节数
while (iNumPixel > 0)
{
pBak = InBuffer ; // 记数指针
memcpy (&Data, InBuffer, iColorBit) ; // 第一个像素
InBuffer += iColorBit ; iNumPixel-- ; Count = 1 ;
while ((Count < 0x7F) && (iNumPixel > 0)) // 统计重复像素
{
memcpy (&Next, InBuffer, iColorBit) ; // 下一个像素
if (Next != Data)
break ;
InBuffer += iColorBit ; iNumPixel-- ; Count++ ;
}
if (Count == 1) // 无重复像素
{
while ((Count < 0x7F) && (iNumPixel > 0)) // 统计不重复像素
{
Count++ ; Data = Next ;
InBuffer += iColorBit ; iNumPixel-- ;
memcpy (&Next, InBuffer, iColorBit) ; // 下一个像素
if (Data == Next)
break ;
}
// 直接copy不重复像素
*OutBuffer++ = (BYTE)(Count - 1) ;
Count = InBuffer - pBak ; // Count->临时变量
memcpy (OutBuffer, pBak, Count) ;
OutBuffer += Count ;
}
else // 重复像素
{
*OutBuffer++ = 0x80 | (BYTE)--Count ;
memcpy (OutBuffer, &Data, iColorBit) ;
OutBuffer += iColorBit ;
}
} // End of while
return OutBuffer ;
}
//===================================================================
#endif
Jagen在路上
2005-09-08
打赏
举报
回复
#ifndef __FOO_RLE_COMPRESS_H__
#define __FOO_RLE_COMPRESS_H__
#include <windows.h>
#pragma once
//====================================================================
// RLE - 压缩算法
//====================================================================
//////////////////////////////////////////////////////////////////////
// 功 能 :RLE压 / 解压缩 ( PCX, TGA 图像 ) //
// //
// 参 数 :iColorBit 为像素颜色位数 //
// PCX为 :1, 4, 8, 24 //
// TGA为 :8, 16, 24, 32 //
// iNumPixel 为写入OutBuffer中的像素个数 //
// //
// 返回值 :EncodeLine 返回编码后 OutBuffer 的指针 //
// DecodeLine 返回解码后 InBuffer 的指针 //
// //
// 说 明 :PCX图像 :1,4,8位色位图按字节处理,24位色分成3通道处理 //
// TGA图像 :支持8, 16, 24, 32色, 不支持15位色 //
// 压缩时OutBuffer至少两倍InBuffer大小 //
//////////////////////////////////////////////////////////////////////
BYTE * RLE_PCX_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
BYTE * RLE_PCX_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
BYTE * RLE_TGA_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
BYTE * RLE_TGA_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) ;
//===================================================================
// Implement
//===================================================================
inline BYTE * RLE_PCX_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, BYTE * OutBuffer) {
register BYTE Data, Num, Pack = 8 / iColorBit ;
if (iColorBit <= 8) // 1,4,8位色
while (iNumPixel > 0)
{
Data = *InBuffer++ ; // Next Byte
if ( (Data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
Num = Data & 0x3F ; // 重复字节
memset (OutBuffer, *InBuffer++, Num) ;
OutBuffer += Num ; iNumPixel -= Num * Pack ;
}
else
{
*OutBuffer++ = Data ;
iNumPixel -= Pack ;
}
}
else // 24位色分Channel
for (int i = 2 ; i >= 0 ; i--) // RGB channel
{
int iCount = iNumPixel ;
BYTE * pChannel = OutBuffer + i ;
while (iCount-- > 0) // 一定会写入一个像素(--)
{
Data = *InBuffer++ ; // Next Byte
if ( (Data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
Num = Data & 0x3F ; // 重复像素
for (int x = 0 ; x < Num ; x++, pChannel += 3)
*pChannel = *InBuffer ;
InBuffer++ ;
iCount -= Num - 1 ;
}
else
{ *pChannel = Data ; pChannel += 3 ; }
}
}
return InBuffer ;
}
//===================================================================
inline BYTE * RLE_PCX_EncodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, // iNumPixel即为图像宽
BYTE * OutBuffer) {
register BYTE data, cCount ;
int PcxRow = 2 * ( (iNumPixel * (iColorBit % 16) + 15) / 16 ) ;
if (iColorBit <= 8) // 1,4,8位色
while (PcxRow > 0)
{
cCount = 1 ; data = *InBuffer++ ; PcxRow-- ;
while ( (cCount < 0x3F) && (PcxRow != 0) )
if (*InBuffer != data)// 统计重复字节个数
break ;
else
{
cCount++ ; InBuffer++ ; PcxRow-- ;
}
if (cCount == 1) // 无重复像素
if ( (data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
*OutBuffer++ = 0xC1 ;
*OutBuffer++ = data ;
}
else
*OutBuffer++ = data ; // Data < 0xC0, 直接写字节
else // 重复像素
{
*OutBuffer++ = 0xC0 | cCount ;
*OutBuffer++ = data ;
}
} // 1,4,8位色结束
else // 24位色分Channel
for (int i = 2 ; i >= 0 ; i--) // RGB channel
{
DWORD RowBak = PcxRow ; // 每Channel字节数
BYTE * pChannel = InBuffer + i ;
while (RowBak > 0)
{
cCount = 1 ; data = *pChannel ; pChannel += 3 ; RowBak-- ;
while ( (cCount < 0x3F) && (RowBak != 0) )
if (*pChannel != data) // 统计重复字节个数
break ;
else
{
cCount++ ; pChannel += 3 ; RowBak-- ;
}
if (cCount == 1) // 无重复像素
if ( (data & 0xC0) == 0xC0 ) // Data >= 0xC0
{
*OutBuffer++ = 0xC1 ;
*OutBuffer++ = data ;
}
else
*OutBuffer++ = data ;
else // 重复像素
{
*OutBuffer++ = 0xC0 | cCount ;
*OutBuffer++ = data ;
}
}
}
return OutBuffer ;
}
//===================================================================
inline BYTE * RLE_TGA_DecodeLine (BYTE * InBuffer, int iColorBit,
int iNumPixel, BYTE * OutBuffer) {
register BYTE Data ;
register int Num ;
iColorBit /= 8 ; // 转换为字节数
while (iNumPixel > 0)
{
Data = *InBuffer++ ; // Next Byte
if (Data & 0x80) // Data >= 0x80
{
iNumPixel -= (Num = (Data & 0x7F) + 1) ;
for (int i = 0 ; i < Num ; i++, OutBuffer += iColorBit)
memcpy (OutBuffer, InBuffer, iColorBit) ;
InBuffer += iColorBit ;
}
else // 直接copy Num个像素
{
iNumPixel -= (Num = ++Data) ;
Num *= iColorBit ;
memcpy (OutBuffer, InBuffer, Num) ;
OutBuffer += Num ;
InBuffer += Num ;
}
} // End of while
return InBuffer ;
}
fishgee
2005-09-08
打赏
举报
回复
网上去找吧,应该能找到的
striker_un
2005-09-08
打赏
举报
回复
路过,看过。
fxyuer2004
2005-09-08
打赏
举报
回复
用JPG格式就可以了!哈哈??
fxyuer2004
2005-09-08
打赏
举报
回复
高手,楼主,动手吧!!! UP !
JPEG
图像
压缩
解压
算法——C++实现
兹于2017年11月,应《多媒体技术基础》课程实验的要求,本人就基于JPEG
图像
压缩
解压
算法做了较为深入的理解,用C++语言实现JPEG
图像
压缩
解压
算法。JPEG
图像
压缩
解压
算法一、实验目的1.掌握JPEG的
压缩
原理;2.熟知FDCT变换方法;3.掌握JPEG所采用的行程编码、霍夫曼编码、差分编码等
压缩
技术;4.掌握JPEG
解压
原理。二、实验设备与环境Windows 7 操作系统,Dev-C ++...
图像
压缩
解压
过程
本文主要介绍从摄像机获取
图像
,然后经过
压缩
、封装成一个文件,之后再被
解压
显示出来的
过程
。以下是
图像
压缩
解压
的整个流程图: 图
图像
压缩
解压
的流程图 从摄像头捕获
图像
常见的感光元件有CCD和CMOS材料。在摄像机内部,实际景物的光信号被CCD/CMOS转换为电信号,然后经过A/D转换输出量化电平值。此时输出的数据是未经过
压缩
处理的原始
图像
数据,称为RAW-DATA。 但是,有
来手把手教你通过Matlab用两种方法实现
图像
压缩
与
解压
(附超详细代码),赶紧点赞收藏吧
图像
压缩
方法DCT
图像
压缩
DCT原理介绍DCT和它
解压
时的反运算的具体算法详细实现代码结果展示行程编码
压缩
与
解压
读入
图像
图像
转为矩阵行程编码
压缩
行程编码
解压
显示
图像
完整代码附录 DCT
图像
压缩
DCT原理介绍 数字
图像
处理DCT是数字
图像
处理中的一种重要处理手段,被广泛地用与
图像
的
压缩
编码算法中,已有的各种成熟的
压缩
标准如JPEG,MPEG,H.26X以及HDTV等都无一例外地采用基于DCT/IDCT的
压缩
编码。 离散余弦变换(Discrete Cosine Transform) 是一种最主要的正交变换。它
C++项目:基于HuffmanTree实现文件的
压缩
与
解压
缩
系列文章目录 文章目录系列文章目录前言一、文件
压缩
1.文件
压缩
的概念2.为什么需要
压缩
3.
压缩
的分类4.
压缩
的方法二、HuffmanTree文件
压缩
与
解压
缩1.HuffmanTree的概念2.HuffmanTree的构建3.文件
压缩
1.统计源文件中每个字符出现的频数2.根据统计的结果创建HuffmanTree3.借助Huffman树获取每个字节的编码4.使用获取到的字节编码对源文件进行改写,对源文件每个字节替换成huffman编码4.文件
解压
缩1.
解压
缩需要获取的信息2.从
压缩
文件读取
解压
缩需要用到的信息
基于DCT+huffman变换的
图像
压缩
解压
缩FPGA实现
第三,将
压缩
后的
图像
和原始
图像
进行对比分析,分析其
图像
质量,并对比matlab的仿真结果和FPGA的仿真结果是否一致。注意,这个就是1920*8的modelsim仿真图,从后面的解码后的效果看,基本完全正确。然后在对DCT和Huffman进行简单的设计介绍。第一,通过matlab实现上述算法流程图的仿真;第二,通过verilog实现FPGA的
图像
压缩
;即先分块,然后对分块后的
图像
进行上述分解流程。这里1920*8的测试仿真如下。
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章