最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)圖像壓縮的示例代碼

 更新時間:2023年12月26日 10:54:29   作者:可以幫我找找鑰匙嗎.  
這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)圖像壓縮的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、問題描述

一幅圖像由n*m個像素點(diǎn)組成,其中每個像素的灰度值范圍是0~255(即需要8bit來存儲像素的灰度值),由此可以得出存儲此圖像需要的存儲空間為n*m*8(bit)。

不難看出,直接采用上述的存儲方式是需要占用很多存儲空間的。此時可以采用圖像壓縮算法來節(jié)省存儲空間。

二、算法分析

1、算法思想

將像素序列分段,段內(nèi)的像素灰度值相似(可以用小于8bit的空間來存儲一個像素灰度值),一段內(nèi)的像素用相同的bit數(shù)來存儲,只需要額外存儲每段的長度和bit數(shù)即可,這樣可以節(jié)省很多空間

于是問題的關(guān)鍵就在于如何分段,使得存儲空間的占用最少

2、算法實(shí)現(xiàn)

假設(shè)像素點(diǎn)的灰度集合為p[n],創(chuàng)建三個表 s[i]、l[i]、b[i],其中:

  • s[i]來記錄前 i 個數(shù)字的最優(yōu)處理方式得到的最優(yōu)解。
  • l[i]來記錄當(dāng)前第 i 個數(shù)所在組中有多少個數(shù)。
  • b[i]中存放前 i 個像素點(diǎn)最后一段位數(shù)的最大值。

假設(shè)產(chǎn)生了m個段,則存儲第i段像素所需要的空間為 : l[i] * b[i] + 11(l[i] * b[i]表示這一段像素本身需要的信息, 11則表示這一段的長度l[i]以及該段像素每一個都用幾位來表示b[i], 即3 + 8 = 11位)

總存儲空間為 11m+∑ l[i]*b[i] 

此時只要找出最優(yōu)數(shù)組,即可得到最有效的壓縮方法。最優(yōu)數(shù)組含義是:s[i],1≤i≤n,是像素序列{p1,…,pi}的最優(yōu)分段所需的存儲位數(shù)。

遞推關(guān)系式:

三、代碼實(shí)現(xiàn)

#include<iostream>
using namespace std;
const int N = 10;
 
 
void show(int s[], int l[], int b[], int n)
{
	//在輸出s[n]存儲位數(shù)后,s[]數(shù)組則被重新賦值,用來存儲分段的位置  
	cout << "圖像壓縮后的最小空間為:" << s[n] << endl;
}
 
 
int length(int x)
{
	int count = 1;
	x = x / 2;
	while (x > 0)
	{
		count++;
		x = x / 2;
	}
	return count;
}
 
void compress(int n,int p[N], int s[N], int l[N], int b[N])
{
	int lmax = 256,bmax;
	int header = 11;
	s[0] = 0;
	for (int i = 1; i <= n; i++)
	{
		b[i] = length(p[i]);
		bmax = b[i];
		s[i] = s[i - 1] + bmax;
		l[i] = 1;
		for (int j = 2; j <= i && j <= lmax; j++)
		{
			if (bmax < b[i - j + 1])
			{
				bmax = b[i - j + 1];
			}
			if (s[i] > s[i - j] + j * bmax)
			{
				s[i] = s[i - j] + j * bmax;
				l[i] = j;
			}
		}
		s[i] += header;
	}
}
 
 
int main()
{
	int data[N] = { 10,12,11,9,145,238,2,3,5,1 };
	cout << "圖像的灰度值序列:";
	for (int i = 0; i < N; i++)
	{
		cout << data[i]<<" ";
	}
	cout << endl;
	int s[N],l[N], b[N];
	compress(N - 1, data, s, b, l);
	show(s,l,b,N - 1);
	
}

運(yùn)行結(jié)果:

到此這篇關(guān)于C++實(shí)現(xiàn)圖像壓縮的示例代碼的文章就介紹到這了,更多相關(guān)C++圖像壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

天等县| 金华市| 泾阳县| 阿拉善左旗| 讷河市| 萝北县| 巴里| 太仆寺旗| 克山县| 霸州市| 商都县| 前郭尔| 离岛区| 萨迦县| 正宁县| 广宁县| 桐乡市| 竹北市| 徐州市| 渭南市| 繁昌县| 横峰县| 通化市| 泸西县| 江陵县| 天祝| 定日县| 鹤岗市| 墨竹工卡县| 手机| 泗水县| 绿春县| 乌拉特前旗| 诸城市| 凉山| 仪征市| 从化市| 金平| 杭锦后旗| 吉安市| 讷河市|