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

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

?? areapro.cpp

?? VC++實際編程的源代碼 多種圖像邊緣檢測與分割處理
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
//void Smoothing()   
//----------------------------------------------------------------------
//基本功能:該函數用指定的模板(任意大小)來對指針m_pDibObject中的圖像
//			對象進行平滑操作,參數nTempH指定模板的高度,參數nTempW指定模
//			板的寬度,參數nTempXc和nTempYc指定模板的中心元素坐標,參數
//			fpArray為指定模板元素數組的指針,fCoef指定系數。任何未指
//			定的或默認為-1的坐標將被置為圖像的邊緣值。比如:nX1和nY1會被
//			置為0;nX2和nY2會被置為圖像的寬和高。對整個圖像進行低通濾波
//			的最好方法是不傳遞任何參數。函數使用原先傳入的CDibObject對
//			象指針。
//----------------------------------------------------------------------
//參數說明:float *fpArray	指向模板數組的指針
//			float fCoef		模板系數
//			int   nTempW	模板的寬度
//			int   nTempH	模板的高度
//			int   nTempXc	模板的中心元素X坐標 ( <= nTempW - 1)
//			int   nTempYc	模板的中心元素Y坐標 ( <= nTempH - 1)
//			int	  nX1		默認為-1
//			int   nY1		默認為-1
//			int	  nX2		默認為-1
//			int	  nY2		默認為-1
//----------------------------------------------------------------------
//返    回:無。
//----------------------------------------------------------------------
//注    意:此函數調用區處理類的TemplateOperation()模板操作函數對圖像進行
//			平滑操作,默認的模板是3×3的Box平滑模板。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CAreaPro::Smoothing(float *fpArray, float fCoef, int nTempW, 
						int nTempH, int nTempXc, int nTempYc,
						int nX1, int nY1, int nX2, int nY2)
{
	//圖像指針為空,無法操作返回
	if(m_pDibObject == NULL) return(FALSE);

	//只處理8位圖像
	if(m_pDibObject->GetNumBits() != 8) 
	{
		AfxMessageBox("目前只支持8位灰度圖像的處理!");
		return( FALSE );
	}

	//坐標規整化
	m_pDibObject->NormalizeCoordinates( &nX1, &nY1, &nX2, &nY2 );

	//獲取圖像寬度和高度(以像素為單位)
	int nWidth = m_pDibObject->GetWidth();
	int nHeight = m_pDibObject->GetHeight();

	//對邊界像素不作處理
	if( nX1 < nTempXc ) nX1 = nTempXc;
	if( nY1 < nTempYc ) nY1 = nTempYc;
	if( nX2 > nWidth - nTempW + nTempXc + 1) nX2 = nWidth - nTempW + nTempXc + 1;
	if( nY2 > nHeight - nTempH + nTempYc + 1) nY2 = nHeight - nTempH + nTempYc + 1;

	//定義變量
	unsigned char *pBuffer, *pBits;
	RGBQUAD *pPalette;
	int nWidthBytes, nNewWidthBytes, nNumColors;
	DWORD dwNewSize;

	//獲得圖像指針
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
		                                       m_pDibObject->GetNumBits(),
											   &nNewWidthBytes, 8);
	if( pBuffer == NULL ) return( NULL );

	//獲得顏色數
	nNumColors = m_pDibObject->GetNumColors();
	//獲得調色板指針
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)];
	//獲得位圖數據指針
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
		                               + nNumColors * sizeof(RGBQUAD)];

	dwNewSize = nNewWidthBytes * nHeight;

	//定義用于存儲色相值的臨時數組
	double *pHue = new double [dwNewSize];
	if(pHue == NULL) return(FALSE);
	memset(pHue, 0, dwNewSize * sizeof(double));

	//定義用于存儲飽和度值的臨時數組
	double *pSaturation = new double [dwNewSize];
	if(pSaturation == NULL) return(FALSE);
	memset(pSaturation, 0, dwNewSize * sizeof(double));

	//定義用于存儲亮度值的臨時數組
	unsigned char *pLight = new unsigned char [dwNewSize];
	if(pLight == NULL) return(FALSE);
	memset(pLight, 0, dwNewSize * sizeof(unsigned char));

	float *fTempArray;

	//默認為3×3的高通濾波器1模板
	static float fpDefaultArray[] = {1.0, 1.0, 1.0, 
							         1.0, 1.0, 1.0,
							         1.0, 1.0, 1.0};

	//沒有傳入模板,用默認模板
	if( fpArray == NULL ) 
	{
		fTempArray = fpDefaultArray;
		fCoef = 9;
	}
	//采用傳入的模板
	else fTempArray = fpArray;

	//調用Template操作函數
	if(!TemplateOperation(fTempArray, fCoef, nTempW, nTempH, nTempXc, nTempYc,
						pBits, nWidthBytes, nX1, nY1, nX2, nY2))
	{
		return(FALSE);
	}

	//內存解鎖
	::GlobalUnlock(m_pDibObject->GetDib());

	return( TRUE );

}

////////////////////////////////////////////////////////////////////////
//void Sharping()   
//----------------------------------------------------------------------
//基本功能:該函數用指定的模板(任意大小)來對指針m_pDibObject中的圖像
//			對象進行銳化操作,參數nTempH指定模板的高度,參數nTempW指定模
//			板的寬度,參數nTempXc和nTempYc指定模板的中心元素坐標,參數
//			fpArray為指定模板元素數組的指針,fCoef指定系數。任何未指
//			定的或默認為-1的坐標將被置為圖像的邊緣值。比如:nX1和nY1會被
//			置為0;nX2和nY2會被置為圖像的寬和高。對整個圖像進行低通濾波
//			的最好方法是不傳遞任何參數。函數使用原先傳入的CDibObject對
//			象指針。
//----------------------------------------------------------------------
//參數說明:float *fpArray	指向模板數組的指針
//			int nTempNum	模板個數
//			int   nTempW	模板的寬度
//			int   nTempH	模板的高度
//			int   nTempXc	模板的中心元素X坐標 ( <= nTempW - 1)
//			int   nTempYc	模板的中心元素Y坐標 ( <= nTempH - 1)
//			int	  nX1		默認為-1
//			int   nY1		默認為-1
//			int	  nX2		默認為-1
//			int	  nY2		默認為-1
//----------------------------------------------------------------------
//返    回:BOOL
//			成功時返回TRUE,失敗時返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CAreaPro::Sharping(float *fpArray, int *nDirection, int nTempW, 
						int nTempH, int nTempXc, int nTempYc,
						int nX1, int nY1, int nX2, int nY2)
{
	//圖像指針為空,無法操作返回
	if(m_pDibObject == NULL) return(FALSE);

	//只處理8位圖像
	if(m_pDibObject->GetNumBits() != 8) 
	{
		AfxMessageBox("目前只支持8位灰度圖像的處理!");
		return( FALSE );
	}

	//坐標規整化
	m_pDibObject->NormalizeCoordinates( &nX1, &nY1, &nX2, &nY2 );

	//獲取圖像寬度和高度(以像素為單位)
	int nWidth = m_pDibObject->GetWidth();
	int nHeight = m_pDibObject->GetHeight();

	//對邊界像素不作處理
	if( nX1 < nTempXc ) nX1 = nTempXc;
	if( nY1 < nTempYc ) nY1 = nTempYc;
	if( nX2 > nWidth - nTempW + nTempXc + 1) nX2 = nWidth - nTempW + nTempXc + 1;
	if( nY2 > nHeight - nTempH + nTempYc + 1) nY2 = nHeight - nTempH + nTempYc + 1;

	//定義變量
	unsigned char *pBuffer, *pBits, *pNewBits1, *pNewBits2;
	RGBQUAD *pPalette;
	int nWidthBytes, nNumColors;
	DWORD dwNewSize;

	//獲得圖像指針
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
		                                       m_pDibObject->GetNumBits() );
	if( pBuffer == NULL ) return( NULL );

	//獲得顏色數
	nNumColors = m_pDibObject->GetNumColors();
	//獲得調色板指針
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)];
	//獲得位圖數據指針
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
		                               + nNumColors * sizeof(RGBQUAD)];

	HGLOBAL hNewDib1, hNewDib2;

	//新圖像文件大小(以字節為單位)
	dwNewSize = nWidthBytes * nHeight;
	//為新圖像分配內存
	hNewDib1 = ::GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, dwNewSize );
	//內存分配失敗
	if( hNewDib1 == NULL )
	{
		m_pDibObject->m_nLastError = IMAGELIB_MEMORY_ALLOCATION_ERROR;
		::GlobalUnlock( m_pDibObject->GetDib() );
		return( FALSE );
	}

	//新圖像指針
	pNewBits1 = (unsigned char *) ::GlobalLock( hNewDib1 );
	if( pNewBits1 == NULL )
	{
		::GlobalFree( hNewDib1 );
		m_pDibObject->m_nLastError = IMAGELIB_MEMORY_LOCK_ERROR;
		return( FALSE );
	}

	//復制圖像數據
	memcpy(pNewBits1, pBits, nWidthBytes * nHeight);

	//為新圖像分配內存
	hNewDib2 = ::GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, dwNewSize );
	//內存分配失敗
	if( hNewDib2 == NULL )
	{
		m_pDibObject->m_nLastError = IMAGELIB_MEMORY_ALLOCATION_ERROR;
		::GlobalUnlock( m_pDibObject->GetDib() );
		return( FALSE );
	}

	//新圖像指針
	pNewBits2 = (unsigned char *) ::GlobalLock( hNewDib2 );
	if( pNewBits2 == NULL )
	{
		::GlobalFree( hNewDib2 );
		m_pDibObject->m_nLastError = IMAGELIB_MEMORY_LOCK_ERROR;
		return( FALSE );
	}

	//復制圖像數據
	memcpy(pNewBits2, pBits, nWidthBytes * nHeight);

	float *fTempArray;

	//默認為3×3的Kirsch梯度模板
	static float fpDefaultArray[] = {5.0, 5.0, 5.0, 
							         -3.0, 0.0, -3.0,
							         -3.0, -3.0, -3.0};

	//沒有傳入模板,用默認模板
	if( fpArray == NULL ) fTempArray = fpDefaultArray;
	//采用傳入的模板
	else fTempArray = fpArray;

	int *nTempDirection;

	//默認為8個方向
	static int nDefaultDirection[] = {1, 1, 1, 1, 1, 1, 1, 1};

	//沒有傳入方向,用默認方向
	if( nDirection == NULL ) nTempDirection = nDefaultDirection;
	//采用傳入的方向
	else nTempDirection = nDirection;
	
	//起始方向
	int nStartD = 0;
	
	int i = 0;
	//查找起始方向
	while(nTempDirection[i] == 0 && i < 8)
	{
		//方向旋轉45°		
		i++;

		//給起始方向賦值
		nStartD = i;

		//對模板進行旋轉
		TemplateRotating(fTempArray);

	}

	//沒指定起始方向,返回
	if(i == 8) return(FALSE);

	//調用Template操作函數
	if(!TemplateOperation(fTempArray, 1.0, nTempW, nTempH, nTempXc, nTempYc,
		pNewBits1, nWidthBytes, 
		nX1, nY1, nX2, nY2))
	{
		return(FALSE);
	}

	
	//定義與圖像數據操作有關的變量
	unsigned char *pNewTemp1, *pNewTemp2;
	int x, y;

	for(i = nStartD + 1; i < 8; i++)
	{
		
		//對模板進行旋轉
		TemplateRotating(fTempArray);

		if(nTempDirection[i] == 1)
		{
			//調用Template操作函數
			if(!TemplateOperation(fTempArray, 1.0, nTempW, nTempH, nTempXc, nTempYc,
				pNewBits2, nWidthBytes, 
				nX1, nY1, nX2, nY2))
			{
				return(FALSE);
			}
			
			switch(m_pDibObject->GetNumBits())
			{
			case 8:			//8位圖像
				//行位置
				for(y = nY1; y <= nY2; y++ )
				{
					//新圖像數據指針定位到起始位置
					pNewTemp1 = pNewBits1;
					//新圖像數據指針定位到圖像數據每行的起始零位置
					pNewTemp1 += y * nWidthBytes;
					//新圖像數據指針定位到圖像數據每行的起始nX1位置
					pNewTemp1 += nX1;
					
					//新圖像數據指針定位到起始位置
					pNewTemp2 = pNewBits2;
					//新圖像數據指針定位到圖像數據每行的起始零位置
					pNewTemp2 += y * nWidthBytes;
					//新圖像數據指針定位到圖像數據每行的起始nX1位置
					pNewTemp2 += nX1;
					
					//列位置
					for(x = nX1; x <= nX2; x++)
					{
						if(pNewTemp2[x] > pNewTemp1[x])
							pNewTemp1[x] = pNewTemp2[x];
					}
				}
				break;
			}
			//復制圖像數據
			memcpy(pNewBits2, pBits, nWidthBytes * nHeight);
		}
		
	}

	//復制圖像數據
	memcpy(pBits, pNewBits1, nWidthBytes * nHeight);

	//內存解鎖
	::GlobalUnlock(m_pDibObject->GetDib());

	//釋放不再使用的內存
	::GlobalUnlock( hNewDib1 );
	::GlobalFree( hNewDib1 );
	::GlobalUnlock( hNewDib2 );
	::GlobalFree( hNewDib2 );

	return( TRUE );
}

////////////////////////////////////////////////////////////////////////
//BOOL LapSharping()   
//----------------------------------------------------------------------
//基本功能:該函數用指定的模板(任意大小)來對指針m_pDibObject中的圖像
//			對象進行Laplacian銳化操作,參數nTempH指定模板的高度,參數
//			nTempW指定模板的寬度,參數nTempXc和nTempYc指定模板的中心元素
//			坐標,參數fpArray為指定模板元素數組的指針,fCoef指定系數。任
//			何未指定的或默認為-1的坐標將被置為圖像的邊緣值。比如:nX1和
//			nY1會被置為0;nX2和nY2會被置為圖像的寬和高。對整個圖像進行低
//			通濾波的最好方法是不傳遞任何參數。函數使用原先傳入的
//			CDibObject對象指針。
//----------------------------------------------------------------------
//參數說明:float *fpArray	指向模板數組的指針
//			float fCoef		模板系數
//			int   nTempW	模板的寬度
//			int   nTempH	模板的高度
//			int   nTempXc	模板的中心元素X坐標 ( <= nTempW - 1)
//			int   nTempYc	模板的中心元素Y坐標 ( <= nTempH - 1)
//			int	  nX1		默認為-1
//			int   nY1		默認為-1
//			int	  nX2		默認為-1
//			int	  nY2		默認為-1
//----------------------------------------------------------------------
//返    回:BOOL
//			成功時返回TRUE,失敗時返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CAreaPro::LapSharping(float *fpArray, float fCoef, int nTempW, 
						int nTempH, int nTempXc, int nTempYc,
						int nX1, int nY1, int nX2, int nY2)
{
	//圖像指針為空,無法操作返回
	if(m_pDibObject == NULL) return(FALSE);

	//只處理8位圖像
	if(m_pDibObject->GetNumBits() != 8) 
	{
		AfxMessageBox("目前只支持8位灰度圖像的處理!");
		return( FALSE );
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣91| 国产精品蜜臀在线观看| 夜夜精品视频一区二区| 成人激情开心网| 亚洲色欲色欲www| 91天堂素人约啪| 亚洲精品国产精华液| 欧美日韩一区二区三区在线| 亚洲国产婷婷综合在线精品| 7777精品伊人久久久大香线蕉| 天堂一区二区在线| 欧美二区三区的天堂| 久久99久久久久久久久久久| 欧美xxxx在线观看| www.欧美色图| 亚洲成人你懂的| 久久麻豆一区二区| 97超碰欧美中文字幕| 亚洲九九爱视频| 4438x成人网最大色成网站| 麻豆国产欧美日韩综合精品二区| 久久久久久日产精品| 91最新地址在线播放| 亚洲国产中文字幕在线视频综合| 欧美精品一级二级| 国产盗摄女厕一区二区三区| 一区二区中文字幕在线| 56国语精品自产拍在线观看| 激情欧美日韩一区二区| 中文字幕综合网| 欧美一区二区三区播放老司机| 成人三级在线视频| 五月天激情综合网| 国产亚洲视频系列| 欧美日韩国产系列| 国产精品一区二区黑丝| 亚洲午夜电影在线观看| 久久久久久综合| 欧美日韩国产bt| 国产69精品久久久久777| 午夜免费久久看| 亚洲国产精品激情在线观看| 欧美日本视频在线| 成人一区二区三区视频| 日本系列欧美系列| 亚洲三级电影全部在线观看高清| 日韩欧美综合一区| 在线视频国产一区| 国产精品一区在线| 日韩av中文在线观看| 中文字幕日本乱码精品影院| 精品国产麻豆免费人成网站| 欧美在线播放高清精品| 成人激情文学综合网| 久久国产精品99精品国产 | 2021国产精品久久精品| 91福利在线播放| 成人污污视频在线观看| 精品伊人久久久久7777人| 亚洲成人免费观看| 亚洲精品视频在线看| 国产精品不卡一区二区三区| 久久精品网站免费观看| 欧美精品一区二区久久久| 91精品国产乱| 91精品国产欧美一区二区18 | 国产成人久久精品77777最新版本| 午夜久久久久久久久| 亚洲精品国产无天堂网2021| 国产精品不卡在线观看| 国产精品电影一区二区| 国产女主播一区| 国产女人aaa级久久久级| 久久婷婷综合激情| 久久欧美中文字幕| 精品国产乱码久久久久久1区2区 | 色狠狠桃花综合| 97精品国产露脸对白| www.成人在线| 91丨porny丨最新| 94-欧美-setu| 欧美三级中文字幕在线观看| 在线视频中文字幕一区二区| 色婷婷激情久久| 91福利区一区二区三区| 欧美色老头old∨ideo| 欧美色精品在线视频| 欧美伦理电影网| 欧美大片拔萝卜| 久久婷婷一区二区三区| 国产视频一区在线观看 | 日韩一区二区精品| 日韩精品一区二区三区四区| 久久综合丝袜日本网| 国产人成亚洲第一网站在线播放| 国产精品三级av| 樱桃国产成人精品视频| 亚洲第一主播视频| 久久精品72免费观看| 国产做a爰片久久毛片| 懂色av一区二区在线播放| 99久久国产免费看| 欧美日韩国产综合一区二区| 欧美一区国产二区| 国产网红主播福利一区二区| 日韩久久一区二区| 香蕉加勒比综合久久| 精品一区二区三区影院在线午夜| 国产露脸91国语对白| 91浏览器打开| 欧美一区二区三区四区在线观看 | 精品日韩99亚洲| 国产精品你懂的| 亚洲午夜精品17c| 久久er99精品| 91国偷自产一区二区三区成为亚洲经典 | 国内欧美视频一区二区| 成人av电影观看| 欧美丝袜丝交足nylons图片| 精品久久国产字幕高潮| 亚洲丝袜制服诱惑| 日本va欧美va瓶| 99久久免费视频.com| 欧美成人精品3d动漫h| 亚洲欧美一区二区三区极速播放| 奇米一区二区三区av| 成人黄色在线网站| 欧美精品久久久久久久多人混战| 国产网站一区二区| 日韩国产精品久久| 99国产一区二区三精品乱码| 日韩一区二区电影网| 亚洲自拍偷拍九九九| 国产一区二区三区香蕉| 欧美精品自拍偷拍动漫精品| 欧美国产精品专区| 国产在线精品免费av| 欧美日韩国产精品自在自线| 欧美激情一区二区三区全黄| 乱中年女人伦av一区二区| 91官网在线免费观看| 中文字幕在线免费不卡| 国产一区视频网站| 欧美一级一区二区| 亚洲成人免费在线观看| 91搞黄在线观看| 亚洲精品成人天堂一二三| 国产成人超碰人人澡人人澡| 日韩欧美国产精品一区| 香蕉久久一区二区不卡无毒影院 | 日韩av电影免费观看高清完整版| 成人激情综合网站| 久久综合九色综合久久久精品综合| 亚洲小说欧美激情另类| 99久久99久久精品免费观看 | 日本韩国一区二区三区| 欧美国产97人人爽人人喊| 国产自产2019最新不卡| 精品日韩一区二区三区免费视频| 香蕉成人啪国产精品视频综合网 | 成人高清在线视频| 欧美激情在线一区二区| 国产精品中文字幕日韩精品 | 91.xcao| 午夜精品福利久久久| 欧美性大战xxxxx久久久| 亚洲自拍偷拍麻豆| 欧美丝袜丝交足nylons图片| 亚洲高清免费一级二级三级| 欧美午夜片在线观看| 一区二区三区电影在线播| 色综合天天性综合| 亚洲综合一区二区三区| 欧美亚洲日本国产| 亚洲v日本v欧美v久久精品| 欧美日韩国产首页在线观看| 亚洲午夜精品在线| 91麻豆精品国产91久久久资源速度| 一二三四区精品视频| 欧美日韩精品一区二区三区蜜桃| 亚洲影视在线播放| 欧美亚一区二区| 水野朝阳av一区二区三区| 欧美一级久久久| 国产一区二区调教| 国产精品国产自产拍高清av| 91老师片黄在线观看| 午夜欧美在线一二页| 日韩区在线观看| 风间由美性色一区二区三区| 国产精品每日更新在线播放网址| proumb性欧美在线观看| 亚洲一区免费视频| 日韩欧美综合一区| 成人美女视频在线看| 亚洲美女免费视频| 日韩一区二区三区电影| 国产a精品视频| 亚洲午夜三级在线| 日韩一区二区三区视频在线|