⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagemanager.cpp

📁 智能小车导航
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// ImageManager.cpp: implementation of the CImageManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ImageManager.h"
#include "math.h"
#include "Afxtempl.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CImageManager::CImageManager()
{
	g_phei=0;
	g_v=0;
}

CImageManager::~CImageManager()
{

}

/************************************************************************/
/*                        InitCardsProperty()                           */
/************************************************************************/
/*                                                                      */
/*功能描述:  初始化类内相关变量以及图像卡属性变量。                    */
/*                                                                      */ 
/*输入参数:  无                                                        */
/*                                                                      */
/*调用前提:  无                                                        */
/*                                                                      */
/*  返回值:  无                                                        */
/*                                                                      */
/*变量输出:    类内各变量: -四路图像卡打开标志设为false;             */
/*                          -四路图像卡采集标志设为false;             */
/*                          -四路图像卡句柄设为NULL;                  */
/*                          -四路输出图像内存指针为NULL。              */
/*            图像属性变量: -四路默认输入源设为复合视频第二路;        */
/*                          -四路图像格式设为RGB888;                   */
/*                          -四路视频制式设为PAL;                      */
/*                          -四路扫描方式设为FRAME;                    */
/*                          -四路图像采集无镜像;                       */
/*                          -四路图像无GAMMAR校正;                     */
/*                          -四路晶振为28M;                            */
/*                          -四路图像默认亮度值为128;                  */
/*                          -四路图像默认对比度值为128;                */
/*                          -四路图像默认色调为128;                    */
/*                          -四路图像默认饱和值为128;                  */
/*                                                                      */
/*其它说明;   该函数在该类建立时,首先调用该函数对其初始化;但该函数只  */
/*            是设置相关变量的值, 若要真正按照默认值设置图像卡, 需要  */
/*            在调用该函数后, 调用OpenCard()打开图像卡, 然后调用函数  */
/*            UpdataCardAttribute()对图像卡属性进行配置。               */
/*	                                                                    */
/************************************************************************/
void CImageManager::InitCardsProperty()
{
	m_CardOpenState.m_bCard1Opened=false;
	m_CardOpenState.m_bCard2Opened=false;
	m_CardOpenState.m_bCard3Opened=false;
	m_CardOpenState.m_bCard4Opened=false;

	m_CardCapState.m_bCard1Capturing=false;
	m_CardCapState.m_bCard2Capturing=false;
	m_CardCapState.m_bCard3Capturing=false;
	m_CardCapState.m_bCard4Capturing=false;

	m_CardHandle.m_hCard1=NULL;
	m_CardHandle.m_hCard2=NULL;
	m_CardHandle.m_hCard3=NULL;
	m_CardHandle.m_hCard4=NULL;

	m_CardProperty1.m_bMirrorEnabled=false;
	m_CardProperty1.m_byteBrightness=128;
	m_CardProperty1.m_byteContrast=128;
	m_CardProperty1.m_byteHue=128;
	m_CardProperty1.m_byteSaturation=128;
	m_CardProperty1.m_CryOsc=CRY_OSC_28M;
	m_CardProperty1.m_VideoFormat=RGB888;
	m_CardProperty1.m_VideoGammaCorr=NO_GAMMACORR;
	m_CardProperty1.m_VideoMirror=HOR_DIR;
	m_CardProperty1.m_VideoScanMode=FRAME;
	m_CardProperty1.m_VideoStandard=PAL;
	m_CardProperty1.m_VideoSource.type=COMPOSITE_VIDEO;
	m_CardProperty1.m_VideoSource.nIndex=1;

	m_CardProperty2.m_bMirrorEnabled=false;
	m_CardProperty2.m_byteBrightness=128;
	m_CardProperty2.m_byteContrast=128;
	m_CardProperty2.m_byteHue=128;
	m_CardProperty2.m_byteSaturation=128;
	m_CardProperty2.m_CryOsc=CRY_OSC_28M;
	m_CardProperty2.m_VideoFormat=RGB888;
	m_CardProperty2.m_VideoGammaCorr=NO_GAMMACORR;
	m_CardProperty2.m_VideoMirror=HOR_DIR;
	m_CardProperty2.m_VideoScanMode=FRAME;
	m_CardProperty2.m_VideoStandard=PAL;
	m_CardProperty2.m_VideoSource.type=COMPOSITE_VIDEO;
	m_CardProperty2.m_VideoSource.nIndex=1;

	m_CardProperty3.m_bMirrorEnabled=false;
	m_CardProperty3.m_byteBrightness=128;
	m_CardProperty3.m_byteContrast=128;
	m_CardProperty3.m_byteHue=128;
	m_CardProperty3.m_byteSaturation=128;
	m_CardProperty3.m_CryOsc=CRY_OSC_28M;
	m_CardProperty3.m_VideoFormat=RGB888;
	m_CardProperty3.m_VideoGammaCorr=NO_GAMMACORR;
	m_CardProperty3.m_VideoMirror=HOR_DIR;
	m_CardProperty3.m_VideoScanMode=FRAME;
	m_CardProperty3.m_VideoStandard=PAL;
	m_CardProperty3.m_VideoSource.type=COMPOSITE_VIDEO;
	m_CardProperty3.m_VideoSource.nIndex=1;

	m_CardProperty4.m_bMirrorEnabled=false;
	m_CardProperty4.m_byteBrightness=128;
	m_CardProperty4.m_byteContrast=128;
	m_CardProperty4.m_byteHue=128;
	m_CardProperty4.m_byteSaturation=128;
	m_CardProperty4.m_CryOsc=CRY_OSC_28M;
	m_CardProperty4.m_VideoFormat=RGB888;
	m_CardProperty4.m_VideoGammaCorr=NO_GAMMACORR;
	m_CardProperty4.m_VideoMirror=HOR_DIR;
	m_CardProperty4.m_VideoScanMode=FRAME;
	m_CardProperty4.m_VideoStandard=PAL;
	m_CardProperty4.m_VideoSource.type=COMPOSITE_VIDEO;
	m_CardProperty4.m_VideoSource.nIndex=1;
			
	m_CardMemState.m_pucOutputImage_Card1=NULL;
	m_CardMemState.m_pucOutputImage_Card2=NULL;
	m_CardMemState.m_pucOutputImage_Card3=NULL;
	m_CardMemState.m_pucOutputImage_Card4=NULL;
	m_CardMemState.m_gOutputImage_Card1=NULL;
	m_CardMemState.m_gOutputImage_Card2=NULL;
	m_CardMemState.m_gOutputImage_Card3=NULL;
	m_CardMemState.m_gOutputImage_Card4=NULL;
}


/************************************************************************/
/*                        OpenCard()                                    */
/************************************************************************/
/*                                                                      */
/*功能描述:  打开图像卡                                                */
/*                                                                      */ 
/*输入参数:  int nCardNo;-卡号,取值范围1-4                          */
/*                                                                      */
/*调用前提:  无                                                        */
/*                                                                      */
/*  返回值:  BOOL;    =TRUE      -打开成功;                           */
/*                     =FALSE     -打开失败; 	                        */
/*                                                                      */
/*变量输出: 成功-m_CardOpenState中相应于nCardNo的标志为置为true,图像  */
/*                 卡句柄保存于m_CardHandle的相应变量中。               */
/*                                                                      */
/*其它说明;  对图像采集卡进行其它操作,必须首先调用该函数打开采集卡。   */
/*	                                                                    */
/************************************************************************/
BOOL CImageManager::OpenCard(int nCardNo)
{
	CGSTATUS nStatus;
	switch(nCardNo)
	{
	case 1:
		if(m_CardOpenState.m_bCard1Opened)
			return TRUE;
		nStatus=BeginCGCard(nCardNo,&m_CardHandle.m_hCard1);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard1Opened=true;
			return TRUE;
		}
		else 
		{
			m_CardOpenState.m_bCard1Opened=false;
			m_CardHandle.m_hCard1=NULL;
			return FALSE;
		}
		break;
	case 2:
		if(m_CardOpenState.m_bCard2Opened)
			return TRUE;
		nStatus=BeginCGCard(nCardNo,&m_CardHandle.m_hCard2);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard2Opened=true;
			return TRUE;
		}
		else 
		{
			m_CardOpenState.m_bCard2Opened=false;
			m_CardHandle.m_hCard2=NULL;
			return FALSE;
		}
		break;
	case 3:
		if(m_CardOpenState.m_bCard3Opened)
			return TRUE;
		nStatus=BeginCGCard(nCardNo,&m_CardHandle.m_hCard3);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard3Opened=true;
			return TRUE;
		}
		else 
		{
			m_CardOpenState.m_bCard3Opened=false;
			m_CardHandle.m_hCard3=NULL;
			return FALSE;
		}
		break;
	case 4:
		if(m_CardOpenState.m_bCard4Opened)
			return TRUE;
		nStatus=BeginCGCard(nCardNo,&m_CardHandle.m_hCard4);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard4Opened=true;
			return TRUE;
		}
		else 
		{
			m_CardOpenState.m_bCard4Opened=false;
			m_CardHandle.m_hCard4=NULL;
			return FALSE;
		}
		break;
	default:
		return FALSE;
		break;
	}	
}

/************************************************************************/
/*                        CloseCard()                                   */
/************************************************************************/
/*                                                                      */
/*功能描述:  关闭图像卡                                                */
/*                                                                      */ 
/*输入参数:  int nCardNo;-卡号,取值范围1-4                          */
/*                                                                      */
/*调用前提:  -调用该函数前,首先调用StopCapture()停止采集过程;       */
/*            -如果曾使用函数SetOutImageMem分配过图像处理内存,最好先  */
/*              释放该部分内存,即先调用函数FreeOutImageMem()。          */
/*                                                                      */
/*  返回值:  BOOL;    =TRUE      -关闭成功;                           */
/*                     =FALSE     -失败; 	                            */
/*                                                                      */
/*变量输出:  成功-m_CardOpenState中相应于nCardNo的标志为置false,相应  */
/*                  的图像卡句柄置为NULL。                              */
/*                                                                      */
/*其它说明;   在退出应用程序前,调用该函数关闭图像卡。                  */
/*	                                                                    */
/************************************************************************/
BOOL CImageManager::CloseCard(int nCardNo)
{
	CGSTATUS nStatus;
	switch(nCardNo) 
	{
	case 1:
		if(!m_CardOpenState.m_bCard1Opened)
			return TRUE;
		if(m_CardCapState.m_bCard1Capturing)
			return FALSE;
		nStatus=EndCGCard(m_CardHandle.m_hCard1);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard1Opened=false;
			m_CardHandle.m_hCard1=NULL;
			return TRUE;
		}
		return FALSE;
		break;
	case 2:
		if(!m_CardOpenState.m_bCard2Opened)
			return TRUE;
		if(m_CardCapState.m_bCard2Capturing)
			return FALSE;
		nStatus=EndCGCard(m_CardHandle.m_hCard2);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard2Opened=false;
			m_CardHandle.m_hCard2=NULL;
			return TRUE;
		}
		return FALSE;
		break;
	case 3:
		if(!m_CardOpenState.m_bCard3Opened)
			return TRUE;
		if(m_CardCapState.m_bCard3Capturing)
			return FALSE;
		nStatus=EndCGCard(m_CardHandle.m_hCard3);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard3Opened=false;
			m_CardHandle.m_hCard3=NULL;
			return TRUE;
		}
		return FALSE;
		break;
	case 4:
		if(!m_CardOpenState.m_bCard4Opened)
			return TRUE;
		if(m_CardCapState.m_bCard4Capturing)
			return FALSE;
		nStatus=EndCGCard(m_CardHandle.m_hCard4);
		if(nStatus==CG_OK)
		{
			m_CardOpenState.m_bCard4Opened=false;
			m_CardHandle.m_hCard4=NULL;
			return TRUE;
		}
		return FALSE;
		break;
	default:
		return FALSE;
	}	
}

/************************************************************************/
/*                        SetInputViewSize()                            */
/************************************************************************/
/*                                                                      */
/*功能描述:  设置图像采集卡的输入图像采集视野                          */
/*                                                                      */ 
/*输入参数:  int nCardNo;-卡号,取值范围1-4                          */
/*            int nWidth; -输入图像采集宽度;                           */
/*                          PAL时最大为768,NTSC时最大为640             */
/*            int nHeight;-输入图像采集高度                            */
/*                          PAL时最大为576,NTSC时最大为480             */
/*                                                                      */
/*调用前提:  -1) 图像采集卡已打开;                                   */
/*            -2) 如果图像正在采集,调用StopCapture()停止采集过程;    */
/*                                                                      */
/*  返回值:  BOOL;    =TRUE      -设置成功;                           */
/*                     =FALSE     -设置失败;                           */
/*                                                                      */
/*变量输出:  无                                                        */
/*                                                                      */
/*其它说明;   无                                                        */
/*	                                                                    */
/************************************************************************/
BOOL CImageManager::SetInputViewSize(int nCardNo,int nWidth,int nHeight)
{
	CGSTATUS nStatus;
	int W;
	int H;
	
	switch(nCardNo) 
	{
	case 1:
		if(!m_CardOpenState.m_bCard1Opened)
			return FALSE;
		if((m_CardProperty1.m_VideoStandard==PAL)&&(nWidth>768))
			W=768;
		else if((m_CardProperty1.m_VideoStandard==NTSC)&&(nWidth>640))
			W=640;
		else if(nWidth>0)
			W=nWidth;
		else
			return FALSE;
		
		if((m_CardProperty1.m_VideoStandard==PAL)&&(nHeight>576))
			H=576;
		else if((m_CardProperty1.m_VideoStandard==NTSC)&&(nHeight>480))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -