亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
在线观看网站黄不卡| 不卡av在线免费观看| 国产精品1024| 亚洲国产日韩a在线播放| 久久伊99综合婷婷久久伊| 播五月开心婷婷综合| 久久激情综合网| 精品一区二区三区免费| 国产精品91xxx| 欧美综合在线视频| 日韩免费在线观看| 国产精品国产成人国产三级| 亚洲国产精品久久久久婷婷884| 亚洲图片欧美激情| 亚洲理论在线观看| 美腿丝袜一区二区三区| 色婷婷精品大视频在线蜜桃视频| 日本久久电影网| 中文字幕一区二区三区色视频| 日本va欧美va瓶| 精品视频在线免费| 亚洲精品免费在线观看| jiyouzz国产精品久久| 精品国产91洋老外米糕| 日韩精品电影一区亚洲| 欧美影院精品一区| 亚洲精品亚洲人成人网在线播放| 国产一区二区三区免费在线观看| 91精品国产一区二区人妖| 一区二区三区在线免费播放| 99久久婷婷国产综合精品电影 | 国产亚洲一区二区三区四区| 日韩精品成人一区二区三区| 欧美日韩一区二区三区免费看| 亚洲精品成人a在线观看| 欧美在线观看一区| 日韩电影免费在线看| 99久久99精品久久久久久 | 污片在线观看一区二区| 欧美精品色一区二区三区| 日韩经典一区二区| 日韩三级视频中文字幕| 九九视频精品免费| 国产精品午夜在线观看| 欧美性色黄大片| 亚洲人成网站精品片在线观看| 黄色日韩网站视频| 136国产福利精品导航| 欧美人伦禁忌dvd放荡欲情| 麻豆国产精品777777在线| 国产欧美精品一区二区色综合朱莉| 91网站在线播放| 日本三级亚洲精品| 亚洲欧洲精品一区二区三区不卡 | 国产精品久久看| 欧美一卡2卡三卡4卡5免费| 国产99精品国产| 日本伊人色综合网| 亚洲理论在线观看| 中文字幕精品—区二区四季| 日韩欧美一卡二卡| 欧美三级在线看| 99这里都是精品| 国产毛片一区二区| 久久99精品国产麻豆不卡| 亚洲影视在线观看| 国产精品久99| 亚洲国产精品成人综合色在线婷婷| 欧美一级xxx| 717成人午夜免费福利电影| 粗大黑人巨茎大战欧美成人| 久久国产人妖系列| 香蕉乱码成人久久天堂爱免费| 亚洲精品视频一区二区| 国产精品久久久久久久午夜片| 日韩精品一区二区三区视频在线观看 | 日韩高清中文字幕一区| 一区二区三区不卡视频在线观看| 国产精品乱子久久久久| 国产精品欧美综合在线| 国产精品久久久久久久久快鸭 | 成人一区二区视频| 国产乱码字幕精品高清av| 国产成人综合精品三级| 成人aaaa免费全部观看| 91浏览器打开| 日韩一级片网站| 久久久99精品免费观看不卡| 亚洲国产精品成人综合| 亚洲欧美偷拍卡通变态| 午夜欧美在线一二页| 久久精品国内一区二区三区| 成人一级片网址| 91成人在线观看喷潮| 7777精品久久久大香线蕉| 国产嫩草影院久久久久| 亚洲综合小说图片| 午夜电影网亚洲视频| 国产成人精品网址| 884aa四虎影成人精品一区| 国产婷婷精品av在线| 天天做天天摸天天爽国产一区| 奇米色一区二区三区四区| 成人h动漫精品| 精品国产1区二区| 亚洲国产成人91porn| 成人自拍视频在线观看| 精品第一国产综合精品aⅴ| 亚洲欧美日韩国产成人精品影院| 美女高潮久久久| 欧美视频完全免费看| 国产精品久久免费看| 国产成人精品网址| 26uuu亚洲综合色| 全国精品久久少妇| 欧美日韩免费电影| 午夜欧美电影在线观看| 91豆麻精品91久久久久久| 中文字幕在线视频一区| 国产精品123区| 国产午夜精品一区二区三区嫩草 | aaa欧美色吧激情视频| 久久久影院官网| 高潮精品一区videoshd| 国产亚洲欧洲997久久综合| 激情欧美一区二区三区在线观看| 欧美精品久久久久久久多人混战| 艳妇臀荡乳欲伦亚洲一区| 欧美最新大片在线看| 亚洲第一会所有码转帖| 日韩小视频在线观看专区| 国产精品一区二区你懂的| 久久伊人蜜桃av一区二区| 国产精品自拍毛片| 亚洲天堂av一区| 欧美日韩亚洲丝袜制服| 蜜桃91丨九色丨蝌蚪91桃色| 久久久久国产精品麻豆| 99久久99久久综合| 免费成人av在线| 精品1区2区在线观看| 97精品国产97久久久久久久久久久久| 亚洲女同ⅹxx女同tv| 精品日韩一区二区| 91亚洲永久精品| 国产在线一区二区| 亚洲欧美国产三级| 久久伊人蜜桃av一区二区| 色天使色偷偷av一区二区| 国产美女一区二区三区| 一区二区三区四区在线免费观看| 日韩欧美国产一区二区三区| 色综合天天在线| 成人精品一区二区三区中文字幕| 午夜精品一区在线观看| 亚洲三级电影网站| 中文字幕一区二区不卡| 国产亚洲一本大道中文在线| 欧美电影免费观看高清完整版在线观看| 国产成人精品一区二| 国产一区二区视频在线| 日韩不卡一二三区| 日韩精品一卡二卡三卡四卡无卡| 亚洲欧美日韩国产成人精品影院| 国产日韩成人精品| 久久久久久久免费视频了| 久久蜜桃av一区精品变态类天堂| 日韩欧美高清dvd碟片| 日韩午夜中文字幕| 精品奇米国产一区二区三区| 日韩午夜在线播放| 久久综合精品国产一区二区三区 | 色综合网色综合| 色婷婷综合久色| 日本黄色一区二区| 欧洲精品中文字幕| 日韩一区二区三区免费看| 欧美刺激午夜性久久久久久久| 日韩一二三区视频| 久久久91精品国产一区二区精品| 日本一区二区电影| 亚洲欧洲综合另类在线| 视频精品一区二区| 国产一二精品视频| 欧美日精品一区视频| 精品国产乱码久久| 亚洲天堂成人网| 裸体歌舞表演一区二区| 成人精品视频网站| 欧美日韩成人综合天天影院| 久久综合色之久久综合| 亚洲欧美偷拍三级| 国产在线播精品第三| 91碰在线视频| 久久人人爽爽爽人久久久| 亚洲福利视频一区二区| 99热精品国产| 久久久av毛片精品| 美女国产一区二区| 欧美日韩不卡在线|