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

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

?? edgecontour.cpp

?? 車牌定位---VC++源代碼程序 1.24位真彩色->256色灰度圖。 2.預處理:中值濾波。 3.二值化:用一個初始閾值T對圖像A進行二值化得到二值化圖像B。 初始閾值T的
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
// ************************************************************************
//  文件名:edgecontour.cpp
//
//  圖像邊緣與輪廓運算API函數庫:
//
//  RobertDIB()		- robert邊緣檢測運算
//  SobelDIB()		- sobel邊緣檢測運算
//  PrewittDIB()	- prewitt邊緣檢測運算
//  KirschDIB()		- kirsch邊緣檢測運算
//  GaussDIB()		- gauss邊緣檢測運算
//  HoughDIB()		- 利用Hough變換檢測平行直線
//  ContourDIB()	- 輪廓提取
//  TraceDIB()		- 輪廓跟蹤
//  FillDIB()		- 種子填充算法1
//  Fill2DIB()		- 種子填充算法2

//  添加水平和垂直邊緣檢測
//  spDIB()         - 水平   
//  czDIB()         - 垂直 


//
// ************************************************************************

#include "stdafx.h"
#include "edgecontour.h"
#include "TemplateTrans.h"
#include "DIBAPI.h"

#include <math.h>
#include <direct.h>

/*************************************************************************
 *
 * 函數名稱:
 *   RobertDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 邊緣檢測成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用Robert邊緣檢測算子對圖像進行邊緣檢測運算。
 * 
 * 要求目標圖像為灰度圖像。
 ************************************************************************/

BOOL WINAPI RobertDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	LPSTR	lpSrc;
	
	// 指向緩存圖像的指針
	LPSTR	lpDst;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits;
	HLOCAL	hNewDIBBits;

	//循環變量
	long i;
	long j;

	//像素值
	double result;
	unsigned char pixel[4];

	// 暫時分配內存,以保存新圖像
	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

	// 初始化新分配的內存,設定初始值為255
	lpDst = (char *)lpNewDIBBits;
	memset(lpDst, (BYTE)255, lWidth * lHeight);


	//使用水平方向的結構元素進行腐蝕
	for(j = lHeight-1; j > 0; j--)
	{
		for(i = 0;i <lWidth-1; i++)
		{
			//由于使用2×2的模板,為防止越界,所以不處理最下邊和最右邊的兩列像素

			// 指向源圖像第j行,第i個象素的指針			
			lpSrc = (char *)lpDIBBits + lWidth * j + i;

			// 指向目標圖像第j行,第i個象素的指針			
			lpDst = (char *)lpNewDIBBits + lWidth * j + i;

			//取得當前指針處2*2區域的像素值,注意要轉換為unsigned char型
			pixel[0] = (unsigned char)*lpSrc;
			pixel[1] = (unsigned char)*(lpSrc + 1);
			pixel[2] = (unsigned char)*(lpSrc - lWidth);
			pixel[3] = (unsigned char)*(lpSrc - lWidth + 1);

			//計算目標圖像中的當前點
			 result = sqrt(( pixel[0] - pixel[3] )*( pixel[0] - pixel[3] ) + \
				  ( pixel[1] - pixel[2] )*( pixel[1] - pixel[2] ));
			*lpDst = (unsigned char)result;
		
		}
	}

	// 復制腐蝕后的圖像
	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

	// 釋放內存
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);

	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數名稱:
 *   SobelDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 邊緣檢測成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用Sobel邊緣檢測算子對圖像進行邊緣檢測運算。
 * 
 * 要求目標圖像為灰度圖像。
 ************************************************************************/

BOOL WINAPI SobelDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向緩存圖像的指針
	LPSTR	lpDst1;
	LPSTR	lpDst2;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits1;
	HLOCAL	hNewDIBBits1;
	LPSTR	lpNewDIBBits2;
	HLOCAL	hNewDIBBits2;

	//循環變量
	long i;
	long j;

	// 模板高度
	int		iTempH;
	
	// 模板寬度
	int		iTempW;
	
	// 模板系數
	FLOAT	fTempC;
	
	// 模板中心元素X坐標
	int		iTempMX;
	
	// 模板中心元素Y坐標
	int		iTempMY;
	
	//模板數組
	FLOAT aTemplate[9];

	// 暫時分配內存,以保存新圖像
	hNewDIBBits1 = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits1 == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits1 = (char * )LocalLock(hNewDIBBits1);

	// 暫時分配內存,以保存新圖像
	hNewDIBBits2 = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits2 == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits2 = (char * )LocalLock(hNewDIBBits2);

	// 拷貝源圖像到緩存圖像中
	lpDst1 = (char *)lpNewDIBBits1;
	memcpy(lpNewDIBBits1, lpDIBBits, lWidth * lHeight);
	lpDst2 = (char *)lpNewDIBBits2;
	memcpy(lpNewDIBBits2, lpDIBBits, lWidth * lHeight);

	// 設置Sobel模板參數
	iTempW = 3;
	iTempH = 3;
	fTempC = 1.0;
	iTempMX = 1;
	iTempMY = 1;
	aTemplate[0] = -1.0;
	aTemplate[1] = -2.0;
	aTemplate[2] = -1.0;
	aTemplate[3] = 0.0;
	aTemplate[4] = 0.0;
	aTemplate[5] = 0.0;
	aTemplate[6] = 1.0;
	aTemplate[7] = 2.0;
	aTemplate[8] = 1.0;

	// 調用Template()函數
	if (!Template(lpNewDIBBits1, lWidth, lHeight, 
		iTempH, iTempW, iTempMX, iTempMY, aTemplate, fTempC))
	{
		return FALSE;
	}

	// 設置Sobel模板參數
	aTemplate[0] = -1.0;
	aTemplate[1] = 0.0;
	aTemplate[2] = 1.0;
	aTemplate[3] = -2.0;
	aTemplate[4] = 0.0;
	aTemplate[5] = 2.0;
	aTemplate[6] = -1.0;
	aTemplate[7] = 0.0;
	aTemplate[8] = 1.0;

	// 調用Template()函數
	if (!Template(lpNewDIBBits2, lWidth, lHeight, 
		iTempH, iTempW, iTempMX, iTempMY, aTemplate, fTempC))
	{
		return FALSE;
	}

	//求兩幅緩存圖像的最大值
	for(j = 0; j <lHeight; j++)
	{
		for(i = 0;i <lWidth-1; i++)
		{

			// 指向緩存圖像1倒數第j行,第i個象素的指針			
			lpDst1 = (char *)lpNewDIBBits1 + lWidth * j + i;

			// 指向緩存圖像2倒數第j行,第i個象素的指針			
			lpDst2 = (char *)lpNewDIBBits2 + lWidth * j + i;
			
			if(*lpDst2 > *lpDst1)
				*lpDst1 = *lpDst2;
		
		}
	}

	// 復制經過模板運算后的圖像到源圖像
	memcpy(lpDIBBits, lpNewDIBBits1, lWidth * lHeight);

	// 釋放內存
	LocalUnlock(hNewDIBBits1);
	LocalFree(hNewDIBBits1);

	LocalUnlock(hNewDIBBits2);
	LocalFree(hNewDIBBits2);
	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數名稱:
 *   PrewittDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 邊緣檢測成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用Prewitt邊緣檢測算子對圖像進行邊緣檢測運算。
 * 
 * 要求目標圖像為灰度圖像。
 ************************************************************************/

BOOL WINAPI PrewittDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向緩存圖像的指針
	LPSTR	lpDst1;
	LPSTR	lpDst2;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits1;
	HLOCAL	hNewDIBBits1;
	LPSTR	lpNewDIBBits2;
	HLOCAL	hNewDIBBits2;

	//循環變量
	long i;
	long j;

	// 模板高度
	int		iTempH;
	
	// 模板寬度
	int		iTempW;
	
	// 模板系數
	FLOAT	fTempC;
	
	// 模板中心元素X坐標
	int		iTempMX;
	
	// 模板中心元素Y坐標
	int		iTempMY;
	
	//模板數組
	FLOAT aTemplate[9];

	// 暫時分配內存,以保存新圖像
	hNewDIBBits1 = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits1 == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits1 = (char * )LocalLock(hNewDIBBits1);

	// 暫時分配內存,以保存新圖像
	hNewDIBBits2 = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits2 == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits2 = (char * )LocalLock(hNewDIBBits2);

	// 拷貝源圖像到緩存圖像中
	lpDst1 = (char *)lpNewDIBBits1;
	memcpy(lpNewDIBBits1, lpDIBBits, lWidth * lHeight);
	lpDst2 = (char *)lpNewDIBBits2;
	memcpy(lpNewDIBBits2, lpDIBBits, lWidth * lHeight);


	// 設置Prewitt模板參數
	iTempW = 3;
	iTempH = 3;
	fTempC = 1.0;
	iTempMX = 1;
	iTempMY = 1;
	aTemplate[0] = -1.0;
	aTemplate[1] = -1.0;
	aTemplate[2] = -1.0;
	aTemplate[3] = 0.0;
	aTemplate[4] = 0.0;
	aTemplate[5] = 0.0;
	aTemplate[6] = 1.0;
	aTemplate[7] = 1.0;
	aTemplate[8] = 1.0;

	// 調用Template()函數
	if (!Template(lpNewDIBBits1, lWidth, lHeight, 
		iTempH, iTempW, iTempMX, iTempMY, aTemplate, fTempC))
	{
		return FALSE;
	}

	// 設置Prewitt模板參數
	aTemplate[0] = 1.0;
	aTemplate[1] = 0.0;
	aTemplate[2] = -1.0;
	aTemplate[3] = 1.0;
	aTemplate[4] = 0.0;
	aTemplate[5] = -1.0;
	aTemplate[6] = 1.0;
	aTemplate[7] = 0.0;
	aTemplate[8] = -1.0;

	// 調用Template()函數
	if (!Template(lpNewDIBBits2, lWidth, lHeight, 
		iTempH, iTempW, iTempMX, iTempMY, aTemplate, fTempC))
	{
		return FALSE;
	}

	//求兩幅緩存圖像的最大值
	for(j = 0; j <lHeight; j++)
	{
		for(i = 0;i <lWidth-1; i++)
		{

			// 指向緩存圖像1倒數第j行,第i個象素的指針			
			lpDst1 = (char *)lpNewDIBBits1 + lWidth * j + i;

			// 指向緩存圖像2倒數第j行,第i個象素的指針			
			lpDst2 = (char *)lpNewDIBBits2 + lWidth * j + i;
			
			if(*lpDst2 > *lpDst1)
				*lpDst1 = *lpDst2;
		
		}
	}

	// 復制經過模板運算后的圖像到源圖像
	memcpy(lpDIBBits, lpNewDIBBits1, lWidth * lHeight);

	// 釋放內存
	LocalUnlock(hNewDIBBits1);
	LocalFree(hNewDIBBits1);

	LocalUnlock(hNewDIBBits2);
	LocalFree(hNewDIBBits2);
	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數名稱:
 *   KirschDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 邊緣檢測成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用kirsch邊緣檢測算子對圖像進行邊緣檢測運算。
 * 
 * 要求目標圖像為灰度圖像。
 ************************************************************************/

BOOL WINAPI KirschDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向緩存圖像的指針
	LPSTR	lpDst1;
	LPSTR	lpDst2;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits1;
	HLOCAL	hNewDIBBits1;
	LPSTR	lpNewDIBBits2;
	HLOCAL	hNewDIBBits2;

	//循環變量
	long i;
	long j;

	// 模板高度
	int		iTempH;
	
	// 模板寬度
	int		iTempW;
	
	// 模板系數
	FLOAT	fTempC;
	
	// 模板中心元素X坐標

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品一区二区三区精品| 国产性做久久久久久| 精品在线免费观看| 国产精品狼人久久影院观看方式| 欧美美女直播网站| 大胆欧美人体老妇| 日日摸夜夜添夜夜添亚洲女人| 中文乱码免费一区二区| 91精品国产色综合久久ai换脸 | 成人免费毛片app| 日本欧美韩国一区三区| 亚洲另类在线一区| 国产日韩v精品一区二区| 91麻豆精品国产91久久久久| 91一区二区三区在线观看| 精久久久久久久久久久| 首页综合国产亚洲丝袜| 一区二区三区中文字幕电影 | 国产在线精品国自产拍免费| 亚洲国产日韩在线一区模特| 国产精品丝袜一区| 久久综合久久久久88| 日韩写真欧美这视频| 欧美另类videos死尸| 在线视频国内一区二区| av男人天堂一区| 国产a精品视频| 国产a精品视频| 国产成人精品免费在线| 精品在线一区二区三区| 久久国产婷婷国产香蕉| 热久久免费视频| 日本aⅴ免费视频一区二区三区| 天天综合色天天| 亚洲第一会所有码转帖| 亚洲国产精品久久人人爱| 一区二区三区精品视频在线| 一区二区三区蜜桃网| 亚洲欧美怡红院| 成人免费在线播放视频| 日韩美女精品在线| 中文字幕在线不卡| 亚洲青青青在线视频| 中文字幕在线免费不卡| 亚洲同性同志一二三专区| 国产精品久久久久久久久晋中| 国产精品视频免费| 国产精品日韩成人| 亚洲欧洲av另类| 亚洲韩国一区二区三区| 香蕉久久一区二区不卡无毒影院| 五月天久久比比资源色| 男女激情视频一区| 国产传媒日韩欧美成人| 成人app网站| 91久久人澡人人添人人爽欧美| 欧美亚洲一区二区三区四区| 精品视频全国免费看| 91精品国产综合久久久久久久久久 | 99久久精品国产导航| 在线观看av不卡| 91精品国产综合久久精品图片 | 正在播放一区二区| 日韩欧美在线综合网| 久久综合久久综合久久综合| 国产精品天干天干在观线 | 久久成人精品无人区| 国产成人在线观看| 99re视频精品| 欧美剧情电影在线观看完整版免费励志电影| 欧美日韩一二区| 欧美岛国在线观看| 国产精品久线观看视频| 一个色在线综合| 麻豆91在线播放| 成人福利视频在线| 欧美精品123区| 国产亚洲精品aa| 亚洲一区二区美女| 国产在线精品免费av| 色伊人久久综合中文字幕| 日韩欧美中文字幕公布| 中文字幕在线一区免费| 天堂资源在线中文精品| 国产激情91久久精品导航| 在线观看视频一区二区欧美日韩| 精品美女一区二区| 一区二区欧美精品| 国产麻豆午夜三级精品| 欧美影院午夜播放| 国产午夜精品福利| 午夜精品福利在线| 99视频在线精品| 欧美电影免费观看完整版| 自拍偷拍亚洲激情| 国内精品免费在线观看| 在线视频你懂得一区| 中文字幕二三区不卡| 日韩一区精品视频| 色综合网色综合| 国产欧美综合在线观看第十页| 亚洲大片精品永久免费| 成人国产精品免费观看| 日韩欧美国产1| 亚洲国产另类精品专区| www.亚洲色图| 精品国产乱码久久| 日韩和的一区二区| www.性欧美| 2017欧美狠狠色| 美女看a上一区| 欧美色精品天天在线观看视频| 国产精品久久久久影院亚瑟| 国产一区二区精品在线观看| 日韩欧美卡一卡二| 亚洲va天堂va国产va久| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 97精品久久久久中文字幕| 久久久精品免费网站| 美女视频网站黄色亚洲| 日韩三级视频在线观看| 天天av天天翘天天综合网色鬼国产| 欧美优质美女网站| 亚洲欧美激情小说另类| 99久久精品免费看国产| 国产精品全国免费观看高清| 韩国女主播成人在线| 日韩欧美国产麻豆| 日韩精品成人一区二区三区 | 337p亚洲精品色噜噜噜| 亚洲动漫第一页| 欧美色图在线观看| 亚洲综合图片区| 欧洲亚洲精品在线| 亚洲一区二区在线播放相泽| 91亚洲永久精品| 中文字幕在线观看不卡| www.视频一区| 一区二区三区四区视频精品免费 | 99热在这里有精品免费| 国产精品国产精品国产专区不片| 国产91精品精华液一区二区三区 | 亚洲伊人伊色伊影伊综合网| 在线观看视频欧美| 亚洲综合一区二区三区| 欧洲色大大久久| 一区二区国产视频| 欧美日韩激情一区二区| 性做久久久久久免费观看| 欧美一级黄色片| 精品亚洲aⅴ乱码一区二区三区| 欧美成人video| 国产成人一区二区精品非洲| 国产精品天天看| 色婷婷国产精品综合在线观看| 亚洲小说欧美激情另类| 欧美一三区三区四区免费在线看| 久久成人18免费观看| 国产欧美日韩视频一区二区| 成人黄页在线观看| 伊人婷婷欧美激情| 777久久久精品| 精品一区二区免费| 一区在线观看视频| 欧美日韩一级片网站| 精品一区二区综合| 国产日产欧美精品一区二区三区| 99久久99精品久久久久久| 一级做a爱片久久| 欧美成人一区二区三区在线观看| 国产成人综合视频| 亚洲影院免费观看| 精品欧美一区二区在线观看| 成人手机电影网| 性久久久久久久久| 国产日韩精品视频一区| 欧洲国内综合视频| 国内外成人在线| 亚洲品质自拍视频| 精品日韩av一区二区| 91色九色蝌蚪| 韩国中文字幕2020精品| 依依成人精品视频| 国产无一区二区| 欧美精品v国产精品v日韩精品 | 日本vs亚洲vs韩国一区三区二区| 国产精品网友自拍| 日韩午夜在线播放| 91天堂素人约啪| 久久99精品国产.久久久久 | 麻豆精品视频在线观看| 中文字幕一区二区三区蜜月| 777久久久精品| 色综合天天性综合| 麻豆91在线播放免费| 一区二区不卡在线视频 午夜欧美不卡在| 日韩女优视频免费观看| 在线免费亚洲电影| 成人国产一区二区三区精品| 日本aⅴ亚洲精品中文乱码|