亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mydipview.cpp

?? Visual C++、Matlab圖像處理與識別實用案例精選
?? CPP
字號:
// MyDIPView.cpp : implementation of the CMyDIPView class
//

#include "stdafx.h"
#include "MyDIP.h"

#include "MyDIPDoc.h"
#include "MyDIPView.h"
#include "math.h"
#define PI 3.14159
#include <complex>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/*************************************************************************
 *
 * 函數(shù)名稱:
 *   FFT()
 *
 * 參數(shù):
 *   complex<double> * TD	- 指向時域數(shù)組的指針
 *   complex<double> * FD	- 指向頻域數(shù)組的指針
 *   r						-2的冪數(shù),即迭代次數(shù)
 *
 * 返回值:
 *   無。
 *
 * 說明:
 *   該函數(shù)用來實現(xiàn)快速付立葉變換。
 *
 ************************************************************************/
VOID WINAPI FFT(complex<double> * TD, complex<double> * FD, int r)
{
	// 付立葉變換點數(shù)
	LONG	count;
	
	// 循環(huán)變量
	int		i,j,k;
	
	// 中間變量
	int		bfsize,p;
	
	// 角度
	double	angle;
	
	complex<double> *W,*X1,*X2,*X;
	
	// 計算付立葉變換點數(shù)
	count = 1 << r;
	
	// 分配運算所需存儲器
	W  = new complex<double>[count / 2];
	X1 = new complex<double>[count];
	X2 = new complex<double>[count];
	
	// 計算加權(quán)系數(shù)
	for(i = 0; i < count / 2; i++)
	{
		angle = -i * PI * 2 / count;
		W[i] = complex<double> (cos(angle), sin(angle));
	}
	
	// 將時域點寫入X1
	memcpy(X1, TD, sizeof(complex<double>) * count);
	
	// 采用蝶形算法進(jìn)行快速付立葉變換
	for(k = 0; k < r; k++)
	{
		for(j = 0; j < 1 << k; j++)
		{
			bfsize = 1 << (r-k);
			for(i = 0; i < bfsize / 2; i++)
			{
				p = j * bfsize;
				X2[i + p] = X1[i + p] + X1[i + p + bfsize / 2];
				X2[i + p + bfsize / 2] = (X1[i + p] - X1[i + p + bfsize / 2]) * W[i * (1<<k)];
			}
		}
		X  = X1;
		X1 = X2;
		X2 = X;
	}
	
	// 重新排序
	for(j = 0; j < count; j++)
	{
		p = 0;
		for(i = 0; i < r; i++)
		{
			if (j&(1<<i))
			{
				p+=1<<(r-i-1);
			}
		}
		FD[j]=X1[p];
	}
	
	// 釋放內(nèi)存
	delete W;
	delete X1;
	delete X2;
}


/*************************************************************************
 *
 * 函數(shù)名稱:
 *   DCT()
 *
 * 參數(shù):
 *   double * f				- 指向時域值的指針
 *   double * F				- 指向頻域值的指針
 *   r						-2的冪數(shù)
 *
 * 返回值:
 *   無。
 *
 * 說明:
 *   該函數(shù)用來實現(xiàn)快速離散余弦變換。該函數(shù)利用2N點的快速付立葉變換
 * 來實現(xiàn)離散余弦變換。
 *
 ************************************************************************/
VOID WINAPI DCT(double *f, double *F, int r)
{
	// 離散余弦變換點數(shù)
	LONG	count;
	
	// 循環(huán)變量
	int		i;
	
	// 中間變量
	double	dTemp;
	
	complex<double> *X;
	
	// 計算離散余弦變換點數(shù)
	count = 1<<r;
	
	// 分配內(nèi)存
	X = new complex<double>[count*2];
	
	// 賦初值為0
	memset(X, 0, sizeof(complex<double>) * count * 2);
	
	// 將時域點寫入數(shù)組X
	for(i=0;i<count;i++)
	{
		X[i] = complex<double> (f[i], 0);
	}
	
	// 調(diào)用快速付立葉變換
	FFT(X,X,r+1);
	
	// 調(diào)整系數(shù)
	dTemp = 1/sqrt(count);
	
	// 求F[0]
	F[0] = X[0].real() * dTemp;
	
	dTemp *= sqrt(2);
	
	// 求F[u]	
	for(i = 1; i < count; i++)
	{
		F[i]=(X[i].real() * cos(i*PI/(count*2)) + X[i].imag() * sin(i*PI/(count*2))) * dTemp;
	}
	
	// 釋放內(nèi)存
	delete X;
}


/*************************************************************************
 *
 * 函數(shù)名稱:
 *   DIBDct()
 *
 * 參數(shù):
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數(shù))
 *   LONG  lHeight      - 源圖像高度(象素數(shù))
 *
 * 返回值:
 *   BOOL               - 成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數(shù)用來對圖像進(jìn)行離散余弦變換。
 *
 ************************************************************************/
BOOL WINAPI DIBDct(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	unsigned char*	lpSrc;
	
	// 循環(huán)變量
	LONG	i;
	LONG	j;
	
	// 進(jìn)行付立葉變換的寬度和高度(2的整數(shù)次方)
	LONG	w;
	LONG	h;
	
	// 中間變量
	double	dTemp;
	
	int		wp;
	int		hp;
	
	// 圖像每行的字節(jié)數(shù)
	LONG	lLineBytes;
	
	// 計算圖像每行的字節(jié)數(shù)
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	// 賦初值
	w = 1;
	h = 1;
	wp = 0;
	hp = 0;
	
	// 計算進(jìn)行離散余弦變換的寬度和高度(2的整數(shù)次方)
	while(w * 2 <= lWidth)
	{
		w *= 2;
		wp++;
	}
	
	while(h * 2 <= lHeight)
	{
		h *= 2;
		hp++;
	}
	
	// 分配內(nèi)存
	double *f = new double[w * h];
	double *F = new double[w * h];
	
	// 行
	for(i = 0; i < h; i++)
	{
		// 列
		for(j = 0; j < w; j++)
		{
			// 指向DIB第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
			// 給時域賦值
			f[j + i * w] = *(lpSrc);
		}
	}
	
	for(i = 0; i < h; i++)
	{
		// 對y方向進(jìn)行離散余弦變換
		DCT(&f[w * i], &F[w * i], wp);
	}
	
	// 保存計算結(jié)果
	for(i = 0; i < h; i++)
	{
		for(j = 0; j < w; j++)
		{
			f[j * h + i] = F[j + w * i];
		}
	}
	
	for(j = 0; j < w; j++)
	{
		// 對x方向進(jìn)行離散余弦變換
		DCT(&f[j * h], &F[j * h], hp);
	}
	
	// 行
	for(i = 0; i < h; i++)
	{
		// 列
		for(j = 0; j < w; j++)
		{
			// 計算頻譜
			dTemp = fabs(F[j*h+i]);
			
			// 判斷是否超過255
			if (dTemp > 255)
			{
				// 對于超過的,直接設(shè)置為255
				dTemp = 255;
			}
			
			// 指向DIB第y行,第x個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
			// 更新源圖像
			* (lpSrc) = (BYTE)(dTemp);
		}
	}
	
	// 釋放內(nèi)存
	delete f;
	delete F;

	// 返回
	return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CMyDIPView

IMPLEMENT_DYNCREATE(CMyDIPView, CScrollView)

BEGIN_MESSAGE_MAP(CMyDIPView, CScrollView)
	//{{AFX_MSG_MAP(CMyDIPView)
	ON_COMMAND(ID_MENUITEM32778, OnMenuitem32778)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView construction/destruction

CMyDIPView::CMyDIPView()
{
	// TODO: add construction code here

}

CMyDIPView::~CMyDIPView()
{
}

BOOL CMyDIPView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView drawing

void CMyDIPView::OnDraw(CDC* pDC)
{   
	CMyDIPDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(pDoc->m_hDIB == NULL)
		return ;
	// TODO: add draw code for native data here
	int i,j;
    unsigned char *lpSrc;
	LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);
	int cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
	int cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
	LPSTR lpDIBBits=::FindDIBBits (lpDIB);
	// 計算圖像每行的字節(jié)數(shù)
	long lLineBytes = WIDTHBYTES(cxDIB * 8);
	// 每行
	for(i = 0; i < cyDIB; i++)
	{
		// 每列
		for(j = 0; j < cxDIB; j++)
		{
			// 指向DIB第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;
			// 計算新的灰度值
			//*(lpSrc) = BYTE(255-*lpSrc);
		}
	}
	::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);
	CRect rect(0,0,cxDIB,cyDIB), rcDIB(0,0,cxDIB,cyDIB);
	::PaintDIB(pDC->m_hDC, &rect, pDoc->m_hDIB, &rcDIB, pDoc->m_palDIB);
}

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView printing

BOOL CMyDIPView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMyDIPView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMyDIPView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView diagnostics

#ifdef _DEBUG
void CMyDIPView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CMyDIPView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CMyDIPDoc* CMyDIPView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDIPDoc)));
	return (CMyDIPDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyDIPView message handlers

void CMyDIPView::OnSize(UINT nType, int cx, int cy)
{
	CScrollView::OnSize(nType, cx, cy);
}

void CMyDIPView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	SetScrollSizes(MM_TEXT, GetDocument()->m_sizeDoc);
}


//對比度拉伸
//DEL void CMyDIPView::OnMenuitem32777() 
//DEL {
//DEL 	
//DEL 	// 獲取文檔
//DEL 	CMyDIPDoc* pDoc = GetDocument();
//DEL 	int i,j;
//DEL 	int r1=60,r2=200;
//DEL 	double k=1.5;
//DEL     unsigned char *lpSrc;	
//DEL 	ASSERT_VALID(pDoc);
//DEL 	if(pDoc->m_hDIB == NULL)
//DEL 		return ;
//DEL 	LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);
//DEL 	LPSTR lpDIBBits=::FindDIBBits (lpDIB);
//DEL 	int cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
//DEL 	int cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
//DEL 	long lLineBytes = WIDTHBYTES(cxDIB * 8);     // 計算圖像每行的字節(jié)數(shù)
//DEL 	// 每行
//DEL 	for(i = 0; i < cyDIB; i++)
//DEL 	{
//DEL 		// 每列
//DEL 		for(j = 0; j < cxDIB; j++)
//DEL 		{
//DEL 			// 指向DIB第i行,第j個象素的指針
//DEL 			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;
//DEL 			// 計算新的灰度值
//DEL 			if(*lpSrc<r1) *lpSrc=BYTE(*lpSrc/k);
//DEL 			else if(*lpSrc<r2) *lpSrc= BYTE((*lpSrc-r1)*k+r1/k);
//DEL 			else *lpSrc=BYTE((*lpSrc-r2)/k+255-(255-r2)/k);
//DEL 		}
//DEL 	}
//DEL 	::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);
//DEL     Invalidate(TRUE);
//DEL }

void CMyDIPView::OnMenuitem32778() 
{
	// 圖像離散余弦變換
	
	// 獲取文檔
	CMyDIPDoc* pDoc = GetDocument();
	
	// 指向DIB的指針
	LPSTR	lpDIB;
	
	// 指向DIB象素指針
	LPSTR    lpDIBBits;
	
	// 鎖定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
	
	// 找到DIB圖像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	
	// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的離散余弦變換,其它的可以類推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用戶
		MessageBox("目前只支持256色位圖的離散余弦變換!", "系統(tǒng)提示" ,
			MB_ICONINFORMATION | MB_OK);
		
		// 解除鎖定
		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
		
		// 返回
		return;
	}
	
	// 更改光標(biāo)形狀
	BeginWaitCursor();
	
	// 調(diào)用DIBDct()函數(shù)進(jìn)行離散余弦變換
	if (::DIBDct(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB)))
	{
		
		// 設(shè)置臟標(biāo)記
		pDoc->SetModifiedFlag(TRUE);
		
		// 更新視圖
		pDoc->UpdateAllViews(NULL);
	}
	else
	{
		// 提示用戶
		MessageBox("分配內(nèi)存失敗!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除鎖定
	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
	
	// 恢復(fù)光標(biāo)
	EndWaitCursor();
	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产清纯白嫩初高生在线观看91| 亚洲欧美另类综合偷拍| 欧美美女一区二区在线观看| 亚洲精品成人悠悠色影视| 久久蜜桃一区二区| 26uuu国产电影一区二区| 久久综合色婷婷| 欧美精品一区二区不卡| 精品剧情v国产在线观看在线| 日韩精品一区二区三区视频播放| 日韩欧美亚洲一区二区| 日韩美女一区二区三区四区| 欧美成人艳星乳罩| 久久久av毛片精品| 中文字幕欧美三区| 18成人在线观看| 亚洲一二三区视频在线观看| 五月激情六月综合| 美女视频一区二区| 国产乱码精品一区二区三| 大尺度一区二区| 一本久久综合亚洲鲁鲁五月天 | 日本在线不卡一区| 青青草成人在线观看| 久久电影国产免费久久电影 | 三级一区在线视频先锋| 午夜影院久久久| 蜜桃av一区二区三区电影| 狠狠色狠狠色综合| 国产不卡视频在线播放| 色综合色综合色综合| 91精品国产色综合久久久蜜香臀| 精品999在线播放| 国产欧美精品在线观看| 亚洲精品视频一区二区| 免费在线看一区| 成人精品免费看| 欧美亚洲自拍偷拍| 日韩欧美成人激情| 国产精品嫩草影院com| 一区二区欧美国产| 日韩天堂在线观看| 精品欧美一区二区久久| 久久综合国产精品| 欧美成va人片在线观看| 国产精品午夜电影| 亚洲韩国精品一区| 国产真实乱子伦精品视频| 91论坛在线播放| 日韩欧美一区二区视频| 中文字幕日韩一区二区| 美女一区二区久久| 99精品欧美一区二区三区小说| 777亚洲妇女| 综合久久给合久久狠狠狠97色| 三级亚洲高清视频| 99久久伊人精品| 欧美成人aa大片| 亚洲一区视频在线| 懂色av中文字幕一区二区三区 | 日韩免费在线观看| 国产精品国产馆在线真实露脸 | 91高清在线观看| 久久久综合视频| 性欧美大战久久久久久久久| 风间由美中文字幕在线看视频国产欧美| 色国产综合视频| 国产精品美女久久久久久久久久久| 日韩精品亚洲专区| 色诱视频网站一区| 国产欧美日韩综合| 蜜臀久久99精品久久久画质超高清 | 亚洲日本在线看| 精品系列免费在线观看| 欧美精品亚洲一区二区在线播放| 国产精品久久久久一区二区三区| 久久精品国产免费| 欧美人妖巨大在线| 亚洲精品国产成人久久av盗摄| 国产成人啪午夜精品网站男同| 精品少妇一区二区| 亚洲一区二区三区四区五区黄 | 91免费视频网址| 国产女人18毛片水真多成人如厕| 久久成人18免费观看| 欧美日韩1区2区| 一级精品视频在线观看宜春院| 99久久免费国产| 国产欧美视频一区二区| 国产美女精品一区二区三区| 日韩一区二区三区观看| 亚洲国产日韩一区二区| 色综合天天综合狠狠| 国产精品久久久久久亚洲伦| 高清日韩电视剧大全免费| 久久久亚洲国产美女国产盗摄| 久久99精品视频| 日韩欧美国产一区二区在线播放 | 精品综合免费视频观看| 欧美一区二区黄| 青草av.久久免费一区| 欧美一区二区三区在线电影| 天堂蜜桃91精品| 91麻豆精品国产91久久久使用方法| 亚洲成人精品一区二区| 欧美日韩国产三级| 香蕉成人啪国产精品视频综合网| 在线观看av一区| 亚洲综合另类小说| 欧美亚洲免费在线一区| 一区二区三区精品视频在线| 欧美视频三区在线播放| 香蕉成人伊视频在线观看| 欧美一区国产二区| 美女国产一区二区| ww久久中文字幕| 成人在线视频一区二区| 亚洲视频在线观看一区| 91九色最新地址| 爽好久久久欧美精品| 日韩欧美的一区二区| 韩国精品久久久| 国产精品女主播av| 91蝌蚪国产九色| 香蕉加勒比综合久久| 精品免费国产一区二区三区四区| 国产一区二区三区免费观看| 国产精品人人做人人爽人人添| 一本大道av伊人久久综合| 日韩国产在线观看一区| 欧美精品一区二区高清在线观看| 丁香六月综合激情| 亚洲午夜影视影院在线观看| 91精品国产综合久久久久| 韩国欧美国产1区| 国产精品第四页| 欧美三区免费完整视频在线观看| 久久99精品国产麻豆婷婷洗澡| 欧美国产精品一区二区三区| 91欧美一区二区| 久久精品国产免费| 136国产福利精品导航| 5858s免费视频成人| 国产91综合一区在线观看| 一区二区三区毛片| 精品国产1区二区| 色综合天天综合网天天看片| 轻轻草成人在线| 综合在线观看色| 日韩精品一区二区三区视频播放 | 国产91精品入口| 日韩理论电影院| 欧美本精品男人aⅴ天堂| 91免费观看在线| 精品伊人久久久久7777人| 《视频一区视频二区| 日韩欧美黄色影院| 一本大道综合伊人精品热热| 国内一区二区视频| 亚洲综合在线电影| 久久精品一区四区| 欧美乱熟臀69xxxxxx| 成人午夜av电影| 精品一区二区三区久久| 亚洲综合激情另类小说区| 国产欧美一区视频| 欧美日韩国产另类不卡| www.99精品| 国产精品一区二区你懂的| 亚洲aⅴ怡春院| 中文字幕日韩一区| 欧美精品一区二区三区视频| 欧美精品一二三| 在线亚洲高清视频| 成人激情校园春色| 国产剧情一区二区三区| 视频一区中文字幕| 亚洲精品日韩专区silk| 国产欧美精品一区| 精品久久久久av影院 | 国产精品拍天天在线| 精品久久一区二区| 欧美电影一区二区三区| 91久久精品日日躁夜夜躁欧美| 成人午夜视频在线观看| 久久精品国产77777蜜臀| 亚洲午夜电影在线观看| 最新国产精品久久精品| 国产精品婷婷午夜在线观看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲视频一二区| 国产日产欧美精品一区二区三区| 欧美日韩国产另类不卡| 色婷婷久久久亚洲一区二区三区 | 欧美日韩一区二区三区四区五区| 国产1区2区3区精品美女| 国产一区二区视频在线| 激情亚洲综合在线| 寂寞少妇一区二区三区| 蜜桃久久久久久|