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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? threshold.cpp

?? 一些自己做的關于圖象處理的程序(如傅立葉變換
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Threshold.cpp : implementation file
//

#include "stdafx.h"
#include "photostar.h"
#include "Threshold.h"
#include <afxtempl.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CThreshold dialog


CThreshold::CThreshold(CWnd* pParent /*=NULL*/)
	: CDialog(CThreshold::IDD, pParent)
{
	//{{AFX_DATA_INIT(CThreshold)
	m_thresholdvalue = 0;
	//}}AFX_DATA_INIT
}


void CThreshold::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CThreshold)
	DDX_Text(pDX, IDC_EDIT1, m_thresholdvalue);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CThreshold, CDialog)
	//{{AFX_MSG_MAP(CThreshold)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CThreshold message handlers

BOOL CThreshold::OnManualThreshold()
{
	if (m_pImageObject == NULL)
	{
		return FALSE;
	}
	
	int iWidth = m_pImageObject->GetWidth();
	int iHeight = m_pImageObject->GetHeight();
	int iNumBits=m_pImageObject->GetNumBits();
	/******************************the old image*****************************/
	unsigned char *pOldBuffer, *pNewBuffer, *pOldBits, *pNewBits;
	BITMAPFILEHEADER *pOldBFH, *pNewBFH;
	BITMAPINFOHEADER *pOldBIH, *pNewBIH;
	RGBQUAD *pOldPalette, *pNewPalette;
	int nWidthBytes, nNumColors;
	
	pOldBuffer = (unsigned char *) m_pImageObject->GetDIBPointer(&nWidthBytes, m_pImageObject->GetNumBits());
	if (pOldBuffer == NULL) 
	{
		return FALSE;
	}
	
	pOldBFH = (BITMAPFILEHEADER *) pOldBuffer;
	pOldBIH = (BITMAPINFOHEADER *) &pOldBuffer[sizeof(BITMAPFILEHEADER)];
	nNumColors = m_pImageObject->GetNumColors();
	pOldPalette = (RGBQUAD *)  &pOldBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	pOldBits = (unsigned char *) &pOldBuffer[sizeof(BITMAPFILEHEADER)
		+sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];
	
	/*****************************the new image*****************************/
	DWORD dwNewSize;
	HGLOBAL hNewDib;
	
	//Allocate a global memory block for the new image
	dwNewSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) 
		+ nNumColors * sizeof(RGBQUAD)
		+ nWidthBytes * (m_pImageObject->GetHeight());
	hNewDib = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwNewSize);
	if (hNewDib == NULL)
	{
		m_pImageObject->m_nLastError = IMAGELIB_MEMORY_ALLOCATION_ERROR;
		::GlobalUnlock(m_pImageObject->GetDib());
		return FALSE;
	}
	
	//Get the pointer to the new memory block
	pNewBuffer = (unsigned char *) ::GlobalLock(hNewDib);
	if (pNewBuffer == NULL)
	{
		::GlobalFree( hNewDib );
		m_pImageObject->m_nLastError = IMAGELIB_MEMORY_LOCK_ERROR;
		::GlobalUnlock(m_pImageObject->GetDib());
		return FALSE;
	}
	
	pNewBFH = (BITMAPFILEHEADER *) pNewBuffer;
	pNewBIH = (BITMAPINFOHEADER *) &pNewBuffer[sizeof(BITMAPFILEHEADER)];
	pNewPalette = (RGBQUAD *) &pNewBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	pNewBits = (unsigned char *) &pNewBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];
	
	//Make a copy of the old image
	memcpy(pNewBuffer,pOldBuffer,dwNewSize);
	/*****************************************手動閾值處理**************************************/
	int i,j;
	for(i=0;i<iHeight;i++)
	{
		for(j=0;j<iWidth;j++)
		{
			if (pOldBits[(iHeight-1-i)*nWidthBytes+j]>m_thresholdvalue)
			{
				pNewBits[(iHeight-1-i)*nWidthBytes+j]=255;
			}
			else
			{
				pNewBits[(iHeight-1-i)*nWidthBytes+j]=0;
			}
		}
	}
	//free the memory for the old image
	::GlobalUnlock(m_pImageObject->GetDib());
	::GlobalFree(m_pImageObject->GetDib());
	
	//Update the DIB in the object pointed by m_pImaeObject
	::GlobalUnlock(hNewDib); 
	m_pImageObject->SetDib(hNewDib);
	return TRUE;
}

BOOL CThreshold::OnAutoThreshold()
{
//**********獲取圖像的像素區指針和各種參數,這段代碼是通用的****************
	int nWidth = m_pImageObject->GetWidth();   //取得圖像的寬度
	int nHeight = m_pImageObject->GetHeight(); //取得圖像的高度
	int nNumBits = m_pImageObject->GetNumBits();//取得圖像的位數
    m_pTempBits=new BYTE[nWidth*nHeight];

	int nWidthBytes;    //圖像每行所占的字節數                           
	char *pBuffer = (char *) m_pImageObject->GetDIBPointer( &nWidthBytes );

	BITMAPFILEHEADER *pBFH;       //圖像文件頭指針
	BITMAPINFOHEADER *pBIH;       //圖像信息頭指針
	RGBQUAD *pRGBPalette;         //圖像調色板指針
	unsigned char *pBits;         //像素區的首指針
	int nNumColors = m_pImageObject->GetNumColors();
	
	pBFH = (BITMAPFILEHEADER *) pBuffer;
	pBIH = (BITMAPINFOHEADER *) &pBuffer[sizeof(BITMAPFILEHEADER)];
	pRGBPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER)
                  +sizeof(BITMAPINFOHEADER)];
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER)
                  +sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];
	//pBits就是我們所必須要的像素指針!!!
/****************************************自動閾值處理********************************/
//*************初始化類的其他數據成員********************

	int m=1<<nNumBits;
	int i, j, k ,max,min;
	float *w0,*w1,*u0,*u1,*u,*result,*plCount;
	
    w0=new float[m];
	w1=new float[m];
	u0=new float[m];
	u1=new float[m];
	u=new float[m];
	plCount=new float[m];
	result=new float[m];
	m_pfDistr=new float[m];

	for( i=0;i<m;i++)
	{
		w0[i]=0;
		w1[i]=0;
		u0[i]=0;
		u1[i]=0;
		u[i] =0;
		plCount[i]=0;
		result[i]=0;
		m_pfDistr[i]=0;
	}
//********************計算直方圖********************

	for (j=0; j<nHeight; j++)
	{
		for (i=0; i<nWidth; i++)
		{
			m_pTempBits[(nHeight-1-j)*nWidthBytes + i]=
				pBits[(nHeight-1-j)*nWidthBytes+i];
		}
	}
	for (j=0; j<nHeight; j++)
	{
		for (i=0; i<nWidth; i++)
		{
			plCount[pBits[(nHeight-1-j)*nWidthBytes + i]] ++;
                              //注意取圖像中(i, j )點像素的方式!!!!!
		}
	}

	long lTotalCount = (long)nHeight * nWidth;
	for (k=0; k<m; k++)
	{
		m_pfDistr[k] = plCount[k] / (float)lTotalCount;
	}

	for(i=0;i<m;i++)
	{
		if (m_pfDistr[i]>0) 
		{
			max=i;//圖象中的最大灰度值
		}
	}
	i=0;
	if (m_pfDistr[0]==0) 
	{
		while (m_pfDistr[i]==0)
		{
		    i++;
	    	min=i;//圖象中的最小灰度值	
		}
	}
	else
	{
		min=0;
	}
		
	for(k=min;k<=max;k++)
	{
		for(i=0;i<=k;i++)
		{
			w0[k]+=m_pfDistr[i];
			u0[k]+=i*m_pfDistr[i];
		}
		for(i=k;i<=max;i++)
		{
			w1[k]+=m_pfDistr[i];
			u1[k]+=i*m_pfDistr[i];
		}
		u0[k]=u0[k]/w0[k];
        u1[k]=u1[k]/w1[k];
		u[k] =w0[k]*u0[k]+w1[k]*u1[k];
		result[k]=float(w0[k]*pow(u0[k]-u[k],2)+w1[k]*pow(u1[k]-u[k],2));
	}

	float temp;
	temp=result[min];
	for(i=min;i<=max;i++)
	{				
		if(temp<result[i])
		{
			temp=result[i];
			m_thresholdvalue=i;
		}      
	}
	delete w0;
	delete w1;
	delete u0;
	delete u1; 
	delete u;
	delete plCount;
	delete result;
    OnManualThreshold();
	return true;
}

BOOL CThreshold::OnAreaGrowing()
{
if (m_pImageObject == NULL)
	{
		return FALSE;
	}
	
	int iWidth = m_pImageObject->GetWidth();
	int iHeight = m_pImageObject->GetHeight();
	
	/*************************************the old image*****************************/
	unsigned char *pOldBuffer, *pNewBuffer, *pOldBits, *pNewBits;
	BITMAPFILEHEADER *pOldBFH, *pNewBFH;
	BITMAPINFOHEADER *pOldBIH, *pNewBIH;
	RGBQUAD *pOldPalette, *pNewPalette;
	int nWidthBytes, nNumColors;
	
	pOldBuffer = (unsigned char *) m_pImageObject->GetDIBPointer(&nWidthBytes, m_pImageObject->GetNumBits());
	if (pOldBuffer == NULL) 
	{
		return FALSE;
	}
	
	pOldBFH = (BITMAPFILEHEADER *) pOldBuffer;
	pOldBIH = (BITMAPINFOHEADER *) &pOldBuffer[sizeof(BITMAPFILEHEADER)];
	nNumColors = m_pImageObject->GetNumColors();
	pOldPalette = (RGBQUAD *) &pOldBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	pOldBits = (unsigned char *) &pOldBuffer[sizeof(BITMAPFILEHEADER)
		+sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];
	
	/*************************************the new image*****************************/
	DWORD dwNewSize;
	HGLOBAL hNewDib;
	
	//Allocate a global memory block for the new image
	dwNewSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) 
		+ nNumColors * sizeof(RGBQUAD)
		+ nWidthBytes * (m_pImageObject->GetHeight());
	hNewDib = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwNewSize);
	if (hNewDib == NULL)
	{
		m_pImageObject->m_nLastError = IMAGELIB_MEMORY_ALLOCATION_ERROR;
		::GlobalUnlock(m_pImageObject->GetDib());
		return FALSE;
	}
	
	//Get the pointer to the new memory block
	pNewBuffer = (unsigned char *) ::GlobalLock(hNewDib);
	if (pNewBuffer == NULL)
	{
		::GlobalFree( hNewDib );
		m_pImageObject->m_nLastError = IMAGELIB_MEMORY_LOCK_ERROR;
		::GlobalUnlock(m_pImageObject->GetDib());
		return FALSE;
	}
	
	pNewBFH = (BITMAPFILEHEADER *) pNewBuffer;
	pNewBIH = (BITMAPINFOHEADER *) &pNewBuffer[sizeof(BITMAPFILEHEADER)];
	pNewPalette = (RGBQUAD *) &pNewBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	pNewBits = (unsigned char *) &pNewBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];
	
	//Make a copy of the old image
	memcpy(pNewBuffer,pOldBuffer,dwNewSize);
	
	int i,j,ii,jj;
	int n = 0;
	int temp =0;
	int germ_x[10000],germ_y[10000];
	//*******************************找出種子***********************
	for (j=1; j<iHeight; j++)
	{
		for (i=1; i<iWidth; i++)
		{		
			temp = 0;
			for (jj=0; jj<3; jj++)
			{
				for (ii=0; ii<3; ii++)
				{
					if (ii!=1 || jj!=1) 
					{
						if (pOldBits[(iHeight-1-(j-1+jj))*nWidthBytes + (i-1+ii)] 
							!= pOldBits[(iHeight-1-j)*nWidthBytes + i]) 
						{
							temp++;
						}
						if (temp == 8)
						{
							germ_x[n] = i;
							germ_y[n] = j;
							n++;
						}
					}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久综合狠狠综合| 日韩主播视频在线| 国产精品毛片a∨一区二区三区| 国产人成一区二区三区影院| 欧美va日韩va| 中文字幕日韩一区二区| 亚洲人成在线观看一区二区| 午夜欧美视频在线观看| 看电影不卡的网站| 91视视频在线观看入口直接观看www | 欧美人狂配大交3d怪物一区| 欧美精品日韩一本| 国产精品第一页第二页第三页| 亚洲黄色av一区| 国产v日产∨综合v精品视频| 欧美日韩一区中文字幕| 国产欧美日韩精品一区| 日本午夜一本久久久综合| 国产不卡在线播放| 精品国产欧美一区二区| 伊人一区二区三区| youjizz国产精品| 久久免费电影网| 美女网站在线免费欧美精品| 色老头久久综合| 亚洲综合视频在线| 色94色欧美sute亚洲13| 国产精品毛片高清在线完整版| 精品系列免费在线观看| 3d成人h动漫网站入口| 日韩精品久久理论片| 日韩一区二区中文字幕| 青娱乐精品视频在线| 久久综合色婷婷| 国产一区二区日韩精品| 欧美zozozo| 成人激情免费网站| 国产精品色呦呦| 欧洲一区在线电影| 日本女人一区二区三区| 一区二区三区小说| 久久99国产精品成人| 久久精品人人做人人综合| 国产成人免费视频网站| 综合色天天鬼久久鬼色| 欧美精品在线视频| 国产剧情在线观看一区二区| 中文字幕av资源一区| 色综合久久88色综合天天| 久久99国内精品| 亚洲欧美日韩成人高清在线一区| 777奇米四色成人影色区| 精品亚洲porn| 亚洲一区二区偷拍精品| 久久精品一区二区三区av| 色悠悠久久综合| 国产凹凸在线观看一区二区| 亚洲自拍都市欧美小说| 亚洲欧洲精品天堂一级| 久久这里只精品最新地址| 欧美日韩高清一区二区三区| 顶级嫩模精品视频在线看| 麻豆91精品91久久久的内涵| 亚洲一区在线播放| 亚洲国产毛片aaaaa无费看 | 一区二区三区波多野结衣在线观看| 日韩欧美美女一区二区三区| 欧美三级韩国三级日本三斤| 色婷婷av一区二区三区gif| 成人小视频免费观看| 国产盗摄女厕一区二区三区 | 三级亚洲高清视频| 精品卡一卡二卡三卡四在线| 精品国产sm最大网站免费看| 欧美一级夜夜爽| 中文幕一区二区三区久久蜜桃| 久久亚洲一级片| 亚洲三级在线免费观看| 亚洲一区二区三区三| 麻豆专区一区二区三区四区五区| 日韩国产欧美视频| 成人免费不卡视频| 欧美视频中文字幕| 国产网站一区二区| 亚洲激情欧美激情| 激情综合网av| 欧美日韩在线观看一区二区| 久久久777精品电影网影网| 亚洲欧美电影院| 国产成人在线网站| 欧美一二三区在线观看| 依依成人精品视频| 99精品国产视频| 国产精品久久午夜| 麻豆精品视频在线观看视频| 国产精品亚洲人在线观看| 在线视频你懂得一区| 国产精品日韩精品欧美在线| 黄色成人免费在线| 日韩视频在线永久播放| 亚洲成在线观看| 欧美日韩成人高清| 亚洲国产日日夜夜| 欧美日韩黄色影视| 天天影视网天天综合色在线播放| 99在线精品视频| 亚洲综合一二三区| 在线一区二区三区四区| 洋洋av久久久久久久一区| 欧美日韩国产精选| 久久精品国产精品青草| 欧美电影免费观看高清完整版 | 亚洲情趣在线观看| 91国内精品野花午夜精品| 亚洲影视在线播放| 欧美日韩一区二区三区四区| 久久99日本精品| 日韩一区二区在线免费观看| 韩国精品主播一区二区在线观看 | 成人午夜短视频| 一区二区三区日韩欧美| 欧美一区二区三区播放老司机| 国产一区二区三区电影在线观看| 国产精品久久影院| 精品国产1区二区| 成人免费的视频| 国产一区二区三区高清播放| 国产精品福利一区| 国产亚洲1区2区3区| 欧美乱熟臀69xxxxxx| 99久久99久久综合| 国产精品99久| 精品制服美女丁香| 香蕉加勒比综合久久| 亚洲日本乱码在线观看| 精品嫩草影院久久| 91丝袜高跟美女视频| 亚洲视频免费在线观看| 日韩精品一区在线| 91麻豆福利精品推荐| 成人app在线观看| 色综合色综合色综合色综合色综合 | 9久草视频在线视频精品| 国产毛片一区二区| 丁香婷婷深情五月亚洲| 成人亚洲一区二区一| 奇米精品一区二区三区四区| 亚洲成人精品影院| 亚洲欧洲综合另类在线| 亚洲精品高清在线观看| 亚洲一区二区三区三| 亚洲超碰97人人做人人爱| 亚洲第一在线综合网站| 久久成人免费网站| 丁香一区二区三区| 欧美日韩国产欧美日美国产精品| 欧美一区二区精品| 欧美国产精品一区| 亚洲一区二三区| 国内精品写真在线观看| av一二三不卡影片| 日韩一级高清毛片| 亚洲国产岛国毛片在线| 午夜精品福利在线| www.日韩大片| 国产欧美视频一区二区三区| 一区二区中文视频| 精品在线观看视频| 欧美日韩高清不卡| 一级日本不卡的影视| 国产精品亚洲第一| 日韩美女天天操| 性做久久久久久免费观看欧美| 国产综合久久久久久鬼色| 在线不卡一区二区| 亚洲1区2区3区视频| 一本色道**综合亚洲精品蜜桃冫| 国产日产欧美一区二区三区| 亚洲成av人片在线观看| av在线不卡网| 亚洲精品国产一区二区精华液| 蜜臀av在线播放一区二区三区| 欧美在线一区二区| 亚洲国产综合人成综合网站| 色呦呦日韩精品| 日本午夜精品视频在线观看| 91精品欧美福利在线观看| 日本网站在线观看一区二区三区| 制服视频三区第一页精品| 奇米888四色在线精品| 欧美大片拔萝卜| 成人av在线影院| 亚洲大片精品永久免费| 日韩一级二级三级| 国产一区二区中文字幕| 国产精品人成在线观看免费| 在线一区二区三区四区五区| 日韩va亚洲va欧美va久久| 欧美一区二区三区免费| 99re在线精品|