CCD+采集卡,采集的数据,在显示、处理时爆慢,文中提供详细的程序,请有识之士给予指点
你好,谢谢你对本贴的关注! :)
我用CCD数据采集卡,采集了一些CCD拍摄的数据,因是线阵CCD,一次只能采集一行(采集一次时间为5ms),5000个象元(象素)。现拟采集5000行,想在显示器上显示出来。以下的程序,运行是成功的,也可以显示想要采集的数据,但就是显示速度爆慢,在采集、显示500行的时候,时间提示是11秒,当采集5000行的时候,时间竟然达到3分钟之久;
想请教在C++builder程序开发中,特别是图像显示、处理中,如何提高显示或处理的速度??程序如下,希望有识之士给予指点,谢谢!
另:我在显示的时候,发现一个不太好的现象,当我采集第一幅图的时候,Label显示的时间为11秒,而采集第二幅图的时候,显示时间就会提高,之后,每显示一幅新图,时间就会有所上升;感觉内存好像被吃完了,但我用了delete语句,为何显示速度会逐渐变慢呢?
void __fastcall TForm1::Button1Click(TObject *Sender)
{ unsigned long iCCDData[5000];
// 为采集卡指针变量开辟相应的存储空间,采集卡自带有存储器
unsigned long c;
Bitmap = new Graphics::TBitmap;
Bitmap->Width=5000;
Bitmap->Height=1500;
HANDLE m_hCcdDevice; //CCD 数据采集卡句柄
int m_iIntegralTime=0; //设置CCD积分时间
int m_iPixelSum=5000; //设置CCD采集一行的象元(象素)数
int m_iLineSum=1; //设置一次采集的行数
m_hCcdDevice=Null;
TTime a,b;
a=Time();
for(int x=0;x<4999;x++) //采集5000行(循环)
{
m_hCcdDevice = lcDeviceOpen(); //打开数据采集卡
if(m_hCcdDevice == NULL)
ShowMessage("Unsuccessful!");
lcSetCCDParam(m_hCcdDevice, CCD_PIXELS, m_iPixelSum);
lcSetCCDParam(m_hCcdDevice, CCD_DAQLINES, m_iLineSum);
lcSetCCDParam(m_hCcdDevice, CCD_INTEGRAL, m_iIntegralTime);
//以上三句设置采集卡采集参数
if(lcDataAcquisition(m_hCcdDevice,iCCDData,1)==0) //采集卡 //如果采集成功
{
for(int i = 0; i <4999; i=i+1)
{
c=*(iCCDData+i)>>4; //因采集卡是12位的,即4096级灰
//度,但用RGB只能显示256级(如果能显示4096级,请告之),故而除以16
//(左移四位))
Bitmap->Canvas->Pixels[i][x] = (TColor)RGB( c,c,c);
if(i>=4999) //采集一行完毕,关闭采集卡
{
if(m_hCcdDevice != NULL)
{
lcDeviceClose(m_hCcdDevice);
m_hCcdDevice = NULL;
}
}
}
}
}
lcDeviceClose(m_hCcdDevice);
m_hCcdDevice = NULL;
Image1->Picture->Bitmap->Assign(Bitmap);
delete Bitmap;
b=Time();
Label1->Caption =b-a;
Image1->Picture->SaveToFile("aa.bmp");
}