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

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

?? calibrtwocamadlg.cpp

?? 這是前段時間自己寫的一個給兩個攝像機定標的對話框程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號:

	CvFont dfont;
	cvInitFont (&dfont, CV_FONT_VECTOR0, 0.3, 0.3, 0.0f, 1);

	CvPoint onecorner; 

	int numcorners = m_nNumCorners;

	CvPoint2D64d* uv  = new CvPoint2D64d[m_nImageNumber * m_nNumCorners];
	CvPoint3D64d* XYZ = new CvPoint3D64d[m_nImageNumber * m_nNumCorners];

	CvPoint2D32f* corners = new CvPoint2D32f[m_nNumCorners]; //declare an array for the corner points
	CvMemStorage* storage = 0; // allocate some storage for ??

	m_nEffectiveImageNumber=-1;

	for( int imgnum=0; imgnum<m_nImageNumber; imgnum++ )
	{
		numcorners = m_nNumCorners;

		img = p2p_InputImages[imgnum];
		
		imgsize.width = img->width;
		imgsize.height= img->height;

		img0 = cvCloneImage(img); // make copy of the image
		img1 = cvCloneImage(img); // make another copy of the image
		greyimg = cvCreateImageHeader(imgsize,IPL_DEPTH_8U,1); 
		cvCreateImageData(greyimg);

		cvCvtColor(img, greyimg, CV_RGB2GRAY); // convert color image to grey
		img0 = cvCloneImage(greyimg); 

		// Find Corners
		cvFindChessBoardCornerGuesses(greyimg, 
									  img0, 
									  storage, 
									  cvSize(m_nXHeight,m_nXWidth),
									  corners,
									  &numcorners);

		if( numcorners != m_nNumCorners ) {
			// release images
			//cvReleaseImage( &img );
			cvReleaseImage( &img0 );
			cvReleaseImage( &img1 );
			cvReleaseImage( &greyimg );
			continue;
		}
		else
			m_nEffectiveImageNumber++;

		// draw a circle at each corner found
		for( int t = 0; t < numcorners; t++ ) 
		{
			onecorner.x = (int)corners[t].x;
			onecorner.y = (int)corners[t].y;

			cvCircle(img1, onecorner, 8, CV_RGB(0,255,0),2);
			// image, center, radius, color, thickness 
		}

		// Find sub-corners
		cvFindCornerSubPix(greyimg,
						   corners, 
						   numcorners, 
						   cvSize (m_nXHeight,m_nXWidth), 
						   cvSize(-1, -1), 
						   cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10, 0.1));

		// correct order
		if( m_btnApplyOrder ){
			CvPoint3D32f init = FindRectangleCorner( corners, numcorners );
			if( init.z < m_nXHeight*m_nXWidth )
				SortPoints(corners, numcorners, &init);
			else
			{
				AfxMessageBox("SortError");
				// release images
				cvReleaseImage( &img0 );
				cvReleaseImage( &img1 );
				cvReleaseImage( &greyimg );
				m_nEffectiveImageNumber--;
				continue;
			}
		}

		//draw a circle and put the corner number at each subcorner found
		for( t = 0; t < numcorners; t++ ) 
		{
			onecorner.x = (int)corners[t].x;
			onecorner.y = (int)corners[t].y;

			cvCircle(img1, onecorner, 3, CV_RGB(255,0,0),1);

			cvPutText(img1,numbers[t], cvPoint(onecorner.x, onecorner.y + 20), &dfont, CV_RGB(255,0,0)); 
		}

		// CAMERA CALIBRATION PART 
		for( int currPoint=0; currPoint < numcorners; currPoint++ ) 
		{ 
			// Copy image points data 
			uv[ m_nEffectiveImageNumber*numcorners + currPoint].x = corners[currPoint].x;
			uv[ m_nEffectiveImageNumber*numcorners + currPoint].y = corners[currPoint].y;
		}

		int index;
		for( int i = 0; i < m_nXWidth; i++ )
		{
			for( int j = 0; j < m_nXHeight; j++ )
			{
				index = m_nEffectiveImageNumber*numcorners + i*m_nXHeight+j;
				
				XYZ[ index ].x = m_dGridWidth *(m_nXWidth -i);
				XYZ[ index ].y = m_dGridHeight*(m_nXHeight-j);
				XYZ[ index ].z = 0; 
			}
		}

		if( m_bDisplayCorners )
		{
			cvvNamedWindow( "image", 1 ); //create window with the name "image"
			cvvShowImage("image",img1);
			cvvWaitKey(0); // wait for key press before displaying next image
			cvDestroyWindow( "image" );
		}

		// release images
//		cvReleaseImage( &img );
		cvReleaseImage( &img0 );
		cvReleaseImage( &img1 );
		cvReleaseImage( &greyimg );
 
	} //loop to next image 

	// clear memory storage - reset free space position
	free (corners);

	m_nEffectiveImageNumber++;

	delete []uveff ; uveff  =NULL;
	delete []XYZeff; XYZeff = NULL;

	if( m_nImageNumber == m_nEffectiveImageNumber ){
		uveff  = uv;  uv  = NULL;
		XYZeff = XYZ; XYZ = NULL;
	}
	else
	{
		int size = m_nEffectiveImageNumber * m_nNumCorners;
		uveff  = new CvPoint2D64d[size];
		XYZeff = new CvPoint3D64d[size];

		for(int ph=0; ph<size; ph++)
		{
			uveff [ph] = uv [ph];
			XYZeff[ph] = XYZ[ph];
		}
		delete []uv;  uv  = NULL;
		delete []XYZ; XYZ = NULL;
	}

}

CvPoint3D32f CCalibrtwocamaDlg::FindRectangleCorner(CvPoint2D32f *points, int n)
{

	CvPoint3D32f retVal;
	CvPoint2D32f out;
	
	for( int k=0; k<n; k++ )
	{
		out = CalculateAngleRespectTo( points, n,  points[k], m_nXHeight-2, m_nXWidth-2, true, true);
		if( out.x == INT_MIN || out.y == INT_MIN )
			continue;
		else
			break;
	}
	
	out = CalculateAngleRespectTo( points, n,  points[k], m_nXHeight-2, m_nXWidth-2, false, true);
	
	retVal.x = out.x;
	retVal.y = out.y;
	retVal.z = (float)k;
	
	if( k >= m_nXWidth*m_nXHeight )
		return retVal; // error
	
	/////////////////////////////////////////////////////////////
	//	iterate the corner to the top-left coordinate  //////////
	/////////////////////////////////////////////////////////////
	
	int tempIndex=k;
	double degree1, degree2;
	for( int i=0; i<n; i++ )
	{
		degree1 = atan2(points[k].y-points[i].y,points[i].x-points[k].x);
		degree2 = fabs(degree1 - retVal.y);
		
		if( degree2 < PI/90 || degree1 == 0 )
		{
			if( points[i].x < points[tempIndex].x  )
			{
				tempIndex = i;
			}
		}
	}
	k = tempIndex;
	
	// find the the most repeting angle in the y direction
	out = CalculateAngleRespectTo( points, n, points[k], m_nXHeight-2);
	if( out.x == INT_MIN ) AfxMessageBox("error after CalculateAngleRespectTo");
	retVal.x = out.x; // orientation of y-alignment
	
	for( i=0; i<n; i++ )
	{
		degree1 = atan2(points[k].y-points[i].y,points[i].x-points[k].x);
		degree2 = fabs(degree1 - retVal.x);
		
		if( degree2 < PI/90 || degree1 == 0 )
		{
			if( points[i].y < points[tempIndex].y  )
			{
				tempIndex = i;
			}
		}
	}
	k = tempIndex; // TOP-LEFT FOUND
	
	// Find the angles of alignment	
	out = CalculateAngleRespectTo( points, n, points[tempIndex], m_nXHeight-2, m_nXWidth-2, false, true);
	if( out.x == INT_MIN ) AfxMessageBox("error after CalculateAngleRespectTo");
	
	retVal.x = out.x;
	retVal.y = out.y;
	retVal.z = (float)tempIndex;
	
	return retVal;
}

void CCalibrtwocamaDlg::SortPoints(CvPoint2D32f *&points, int n, CvPoint3D32f *init)
{

	CvPoint2D32f* output   = new CvPoint2D32f[n         ];
	CvPoint2D32f* longrow  = new CvPoint2D32f[m_nXHeight];
	CvPoint2D32f* shortcol = new CvPoint2D32f[m_nXWidth ];
	
	int startPointIndex = (int)init[0].z;
	
	int scounter = 0 ;
	
	double degree1, degree2;
	
	for( int i=0; i<n; i++)
	{
		degree1 = atan2(points[startPointIndex].y-points[i].y,points[i].x-points[startPointIndex].x);
		degree2 = fabs(degree1 - init[0].y);
		
		if( degree2 < PI/90 || degree1 == 0 )
		{
			shortcol[scounter] = points[i];
			scounter++;
		}
	}
	if( scounter != m_nXWidth ) AfxMessageBox("Error in CZhangImplementation_1Dlg::SortPoints(CvPoint2D32f *, int, CvPoint3D32f *)");
	
	// sort 6-points top-to-bottom
	SortRespectTo( shortcol, points[startPointIndex], m_nXWidth );
	
	CvPoint2D32f anchor, out;
	int lcounter = 0;
	
	for( i=0; i<scounter; i++ )
	{
		anchor = shortcol[i];
		
		out = CalculateAngleRespectTo(points, n, anchor, m_nXHeight-2);
		if( out.x == INT_MIN ) 
			AfxMessageBox("error:  SortPoints");
		
		lcounter = 0;
		for( int j=0; j<n; j++ )
		{
			degree1 = atan2(anchor.y-points[j].y,points[j].x-anchor.x);
			degree2 = fabs(degree1 - out.x);
			
			if( degree2 < PI/90 || degree1 == 0 )
			{
				longrow[lcounter] = points[j];
				lcounter++;
				if( lcounter == m_nXHeight ) 
					break;
			}
		}
		if( lcounter != m_nXHeight ) AfxMessageBox("Error in CZhangImplementation_1Dlg::SortPoints(CvPoint2D32f *, int, CvPoint3D32f *)");
		
		// sort 8-points left-to-right
		SortRespectTo( longrow, anchor, m_nXHeight );
		
		// insert sorted entires to the output array;
		for( j=0; j<m_nXHeight; j++)
		{
			output[i*m_nXHeight+j] = longrow[j];
		}
	}
	
	delete []shortcol; shortcol = NULL;
	delete []longrow ; longrow  = NULL;
	delete []points  ; points   = output;
}

void CCalibrtwocamaDlg::SortRespectTo(CvPoint2D32f *&arr, CvPoint2D32f anchor, int n)
{

	//  N*N sort scheme
	
	CvPoint2D32f *out  = new CvPoint2D32f[n];
	
	double *dist  = new double[n];
	int    *order = new int[n];
	
	out[0] = anchor;
	
	for( int i=0; i<n; i++)
	{
		dist[i] = sqrt( pow(arr[i].y-anchor.y,2) + pow(arr[i].x-anchor.x,2) );
	}
	
	int minIndex;
	double min;
	
	for( i=0; i<n; i++ )
	{
		min = INT_MAX;
		minIndex = 0;
		for( int j=0; j<n; j++ )
		{
			if( dist[j] < min )
			{
				min = dist[j];
				minIndex = j;
			}
		}
		
		order[i] = minIndex;
		dist[minIndex] = INT_MAX;
	}
	
	for( i=0; i<n; i++)
	{
		out[i] = arr[ order[i] ];
	}
	
	delete []dist;
	delete []order;
	delete []arr; arr = out;
}

CvPoint2D32f CCalibrtwocamaDlg::CalculateAngleRespectTo(CvPoint2D32f *arr, int n, CvPoint2D32f anchor, int thr1, int thr2, bool exact, bool vertAlso)
{

	CvPoint2D32f retVal;
	retVal.x = INT_MIN;
	retVal.y = INT_MIN;
	
	double angle1,angle2;
	
	double *angles		 = new double[n];
	BYTE   *angleCounter = new BYTE  [n];
	
	int		max_1, max_2, maxIndex_1, maxIndex_2;
	double	degree,degree1,degree2;
	
	for( int i=0; i<n; i++ )
	{
		if( anchor.x == arr[i].x && anchor.y == arr[i].y )
			angles[i] = -10000;
		else
			angles[i]	= atan2( anchor.y-arr[i].y , arr[i].x-anchor.x );
	}
	
	for( i=0; i<n; i++) angleCounter[i] = 0;
	
	for( i=0; i<n; i++ )
	{
		if( angles[i]==1000) continue;
		
		for(int j=i+1; j<n; j++ )
		{
			degree = KMathematica::MapAnglePi2mPi(angles[i]-angles[j]);
			if( fabs(degree) <= PI/90 )
			{
				angleCounter[i]++;
				angles[j] = 1000;
			}
		}
	}
	
	max_1	   = INT_MIN;
	maxIndex_1 = 0;
	angle1	   = 0;
	
	for( i=0; i<n; i++ )
	{
		if( angleCounter[i] > max_1 )
		{
			max_1 = angleCounter[i];
			maxIndex_1 = i;
			angle1 = angles[i];
		}
	}
	
	if( max_1 >= thr1 )
		retVal.x = (float)angle1; 
	
	double diff = 0;
	
	if( vertAlso )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa欧美色吧激情视频| 国产一区二区网址| 欧美性猛交xxxxxxxx| 亚洲精品成人在线| 在线观看不卡一区| 免费观看成人鲁鲁鲁鲁鲁视频| 91精品国产手机| 美女一区二区三区在线观看| 精品国产亚洲一区二区三区在线观看 | 欧美v亚洲v综合ⅴ国产v| 另类小说视频一区二区| 中文字幕的久久| 欧洲精品在线观看| 青青草91视频| 亚洲人成伊人成综合网小说| 欧美精品视频www在线观看| 韩国成人精品a∨在线观看| 日韩码欧中文字| 日韩视频一区在线观看| 国产不卡免费视频| 亚洲一二三四区不卡| 精品成人在线观看| 99国内精品久久| 六月丁香婷婷久久| 18欧美乱大交hd1984| 日韩一区二区在线观看| 暴力调教一区二区三区| 日本在线不卡视频| 国产精品不卡在线| 精品女同一区二区| 色妞www精品视频| 激情六月婷婷久久| 亚洲在线观看免费| 欧美激情在线一区二区三区| 欧美精品免费视频| 在线免费观看不卡av| 国产精品夜夜嗨| 视频一区二区不卡| 亚洲激情第一区| 久久综合999| 日韩视频一区二区三区| 91成人在线精品| 国产ts人妖一区二区| 日韩国产欧美在线观看| 亚洲精品免费一二三区| 久久久亚洲综合| 日韩一二三区视频| 欧美体内she精视频| aaa欧美色吧激情视频| 国产精品一区二区三区网站| 免费av网站大全久久| 亚洲国产视频在线| 亚洲欧美一区二区视频| 国产视频在线观看一区二区三区 | 国产亚洲欧美在线| 欧美一区二区精美| 欧美日韩综合一区| 97久久精品人人做人人爽50路| 久久精品久久精品| 日韩国产欧美在线播放| 性感美女极品91精品| 综合久久国产九一剧情麻豆| 中文字幕中文字幕在线一区| 国产区在线观看成人精品| 日韩欧美国产一区在线观看| 欧美电影在线免费观看| 欧美三区在线观看| 欧美中文字幕一二三区视频| 欧美优质美女网站| 日本道在线观看一区二区| 91在线一区二区三区| 99精品欧美一区二区蜜桃免费| 成人综合婷婷国产精品久久蜜臀| 国产精品一级在线| 国产成人精品亚洲日本在线桃色| 国产成人在线视频免费播放| 国产激情一区二区三区| 国产成人综合在线播放| www.在线成人| 一本久道久久综合中文字幕| 日本韩国欧美三级| 欧美人成免费网站| 日韩一区二区三区免费看| 日韩欧美激情在线| 久久久一区二区三区| 日本一区二区三区四区在线视频| 国产精品国产馆在线真实露脸| 国产精品三级视频| 18欧美乱大交hd1984| 亚洲一级在线观看| 蜜桃av噜噜一区二区三区小说| 久久精品99国产精品| 丁香网亚洲国际| 91视频国产观看| 欧美精品久久天天躁| 日韩你懂的在线播放| 久久久久99精品一区| 亚洲日穴在线视频| 亚洲最大成人网4388xx| 免费人成精品欧美精品| 国产在线看一区| 一本色道**综合亚洲精品蜜桃冫 | 久久91精品久久久久久秒播 | 成人激情图片网| 91九色最新地址| 日韩精品一区二区三区中文精品| 国产色产综合产在线视频| 中文字幕欧美区| 亚洲成人激情av| 国产精品一卡二卡| 欧美日韩一区不卡| 2023国产精品视频| 亚洲欧美韩国综合色| 热久久一区二区| 成人高清视频免费观看| 欧美日韩国产免费| 日本一区二区视频在线观看| 亚洲v精品v日韩v欧美v专区| 国产伦精品一区二区三区视频青涩| 99re这里只有精品6| 精品日韩99亚洲| 亚洲精品免费一二三区| 国产一区二区三区不卡在线观看 | 精品视频在线免费观看| 久久亚洲一区二区三区四区| 亚洲精品成人少妇| 国产裸体歌舞团一区二区| 欧美老肥妇做.爰bbww视频| 中文字幕免费在线观看视频一区| 日韩1区2区日韩1区2区| 91国偷自产一区二区使用方法| 久久夜色精品一区| 日韩高清在线不卡| 日本高清视频一区二区| 久久久亚洲国产美女国产盗摄 | 欧美中文字幕久久| 国产精品夫妻自拍| 国产伦精品一区二区三区在线观看| 欧美亚洲精品一区| 亚洲精品写真福利| 不卡的av在线| 中文字幕高清一区| 国产伦精品一区二区三区视频青涩| 91精品国产91综合久久蜜臀| 亚洲精品国产品国语在线app| 成人精品亚洲人成在线| 欧美精品一区二区三区蜜桃| 天天综合色天天综合| 欧美视频一区二| 亚洲在线视频一区| 99久久久精品免费观看国产蜜| 久久久精品日韩欧美| 国产综合久久久久影院| 日韩一区二区在线观看视频| 日韩综合小视频| 欧美精品第1页| 日韩影院精彩在线| 91精品午夜视频| 免费人成在线不卡| 日韩欧美自拍偷拍| 毛片av一区二区三区| 欧美电影免费提供在线观看| 蜜桃视频一区二区| 精品久久国产字幕高潮| 麻豆91在线观看| 精品久久久久久综合日本欧美| 美女视频免费一区| 日韩欧美国产电影| 精品亚洲aⅴ乱码一区二区三区| 日韩精品综合一本久道在线视频| 麻豆精品精品国产自在97香蕉| 制服丝袜国产精品| 美脚の诱脚舐め脚责91| www国产亚洲精品久久麻豆| 国产不卡高清在线观看视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 91麻豆123| 亚洲永久精品大片| 欧美吻胸吃奶大尺度电影| 午夜精品久久久久久久| 在线播放国产精品二区一二区四区| 青青草91视频| 国产日韩av一区二区| 国产91丝袜在线18| 综合电影一区二区三区| 欧美精品xxxxbbbb| 国内精品国产成人国产三级粉色| 国产精品视频看| 欧美日韩黄色一区二区| 美女视频黄久久| 亚洲欧洲色图综合| 在线一区二区观看| 蜜臀av一级做a爰片久久| 日本一区二区三区dvd视频在线| 色综合视频在线观看| 日韩av电影免费观看高清完整版| 亚洲精品一线二线三线无人区| zzijzzij亚洲日本少妇熟睡| 图片区小说区区亚洲影院| 国产亚洲婷婷免费|