線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2557
推到 Plurk!
推到 Facebook!

關於用DOMINO Alpha 2擷取卡擷取影像作處理的問題

尚未結案
savory
一般會員


發表:3
回覆:1
積分:0
註冊:2008-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-12 17:12:09 IP:140.129.xxx.xxx 訂閱
想請問各位大大:

目前我用DOMINO Alpha 2擷取卡所提供的範例可以秀出影像了,但我要作後續的處理,如作二值化等,所以第一我需要知道影像擷取進來的用的參數名稱,第二我要如何才能從連續的影像中改成一張一張地處理。

主要程式如下:
CProject1Doc::CProject1Doc()
{
// TODO: add one-time construction code here
m_Channel = 0 ;
m_pCurrent = NULL ;
m_SizeX = 0;
m_SizeY = 0;
m_BufferPitch = m_SizeX;
m_bScreenRefreshCompleted = TRUE;
}
CProject1Doc::~CProject1Doc()
{
// Set the channel to IDLE before deleting it
McSetParamInt (m_Channel, MC_ChannelState, MC_ChannelState_IDLE);
// Delete the channel
McDelete (m_Channel);
}
BOOL CProject1Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// Show scope of the sample program
MessageBox(NULL, "\
This program demonstrates the Snapshot Acquisiton Mode on a DOMINO Alpha Board. \n\n\
The \"Go!\" menu activates the channel for a \"live\" acquisition. \n\
The example requires an area-scan camera to be connected on connector X \n\
(See the initialization code for camera details). \n\
", "", MB_OK);
// Create a channel using the X connector
McCreate (MC_CHANNEL_ALPHA_X, &m_Channel);
McSetParamInt (m_Channel, MC_DriverIndex, 0);
// Associate a camera and its configuration to the channel
// Please modify the following line to adapt the sample program
// to your camera.
McSetParamStr(m_Channel, MC_CamFile, "XC-HR70_P30SM");
// McSetParamStr(m_Channel, MC_CamFile, "CV-M50C_P50RA.cam");
// The acquisition mode is SNAPSHOT on an Alpha board and has not to be set
// Configure the triggering mode
McSetParamInt (m_Channel, MC_TrigMode, MC_TrigMode_IMMEDIATE);
McSetParamInt (m_Channel, MC_NextTrigMode, MC_NextTrigMode_REPEAT);
// Configure number of acquisition
McSetParamInt (m_Channel, MC_SeqLength_Fr, MC_INDETERMINATE);
// Retrieve image dimensions
McGetParamInt (m_Channel, MC_ImageSizeX, &m_SizeX);
McGetParamInt (m_Channel, MC_ImageSizeY, &m_SizeY);
McGetParamInt (m_Channel, MC_BufferPitch, &m_BufferPitch);
// The memory allocation for the images is automatically done by Multicam when activating the channel.
// We only set the number of surfaces to be created by MultiCam.
McSetParamInt (m_Channel, MC_SurfaceCount, EURESYS_SURFACE_COUNT);
// Enable MultiCam signals
McSetParamInt(m_Channel, MC_SignalEnable MC_SIG_SURFACE_PROCESSING, MC_SignalEnable_ON);
// Register the callback function
McRegisterCallback(m_Channel, GlobalCallback, this);

return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// GlobalCallback
void WINAPI GlobalCallback (PMCSIGNALINFO SigInfo)
{
if (SigInfo && SigInfo->Context)
{
CProject1Doc* pDoc = (CProject1Doc*) SigInfo->Context ;
pDoc->Callback (SigInfo);
}
}
/////////////////////////////////////////////////////////////////////////////
// Callback
void CProject1Doc::Callback(PMCSIGNALINFO SigInfo)
{
if (SigInfo->Signal != MC_SIG_SURFACE_PROCESSING) return ;
// Update "current" surface address pointer
McGetParamInt (SigInfo->SignalInfo, MC_SurfaceAddr, (PINT32) &m_pCurrent);
//----------------------------------------
//
// Insert the eVision code here.
//
//----------------------------------------
// Post screen refresh message only if previous refresh completed
if(m_bScreenRefreshCompleted)
{
m_bScreenRefreshCompleted = FALSE;
POSITION pos = GetFirstViewPosition();
CProject1View *pView = (CProject1View *)GetNextView(pos);
if (pView == NULL) return;
HWND hWindow = pView->GetSafeHwnd();
if (hWindow == NULL) return;
RECT recpict ;
recpict.left =0;
recpict.top =0;
recpict.right = m_SizeX-1;
recpict.bottom = m_SizeY-1;
InvalidateRect(hWindow,&recpict,FALSE);
}
}

/////////////////////////////////////////////////////////////////////////////
// CProject1Doc commands
void CProject1Doc::OnGoMenu()
{
// Activate the channel
McSetParamInt (m_Channel, MC_ChannelState, MC_ChannelState_ACTIVE);
}
/////////////////////////////////////////////////////////////////////////////
// CProject1Doc serialization
void CProject1Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CProject1Doc diagnostics
#ifdef _DEBUG
void CProject1Doc::AssertValid() const
{
CDocument::AssertValid();
}
void CProject1Doc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG

Marcvip
一般會員


發表:5
回覆:9
積分:2
註冊:2003-03-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-11 14:17:22 IP:122.117.xxx.xxx 訂閱
現在回復不曉得會不會太晚了,
第一我需要知道影像擷取進來的用的參數名稱
Ans:影像取得的address在您的code,McGetParamInt (SigInfo->SignalInfo, MC_SurfaceAddr, (PINT32) &m_pCurrent);
其中m_pCurrent就是影像的起點的address,長度就依你設定的寬*高.

第二我要如何才能從連續的影像中改成一張一張地處理。
Ans:將McSetParamInt (m_Channel, MC_ChannelState, MC_ChannelState_ACTIVE);
改為McSetParamInt(m_Channel, MC_SeqLength_Fr, MC_HIGH_PART);,就會grab一張影像,要改回去連續取像,再下McSetParamInt (m_Channel, MC_ChannelState, MC_ChannelState_ACTIVE);

建議:
建議你用他的工具處理影像會比較方便(不過要買licence)
EC24Image1->SetImagePointer(m_SizeX,m_SizeY,(long)m_pCurrent,0);
這樣你就可以用他的元件做一些如二直化,PATTERN MATCH.OCR........

編輯記錄
Marcvip 重新編輯於 2009-03-11 14:25:41, 註解 無‧
系統時間:2024-04-20 12:46:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!