在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

雙MIPI攝像頭圖像系統(tǒng)設(shè)計

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-11-15 10:30 ? 次閱讀

雙MIPI攝像頭圖像系統(tǒng)設(shè)計

介紹

FPGA 的一大優(yōu)勢是我們可以實(shí)現(xiàn)并行圖像處理數(shù)據(jù)流。雖然任務(wù)比較重,但是我們不需要昂貴的 FPGA,我們可以使用成本低廉范圍中的一個,例如 Spartan 7 或 Artix 7。對于這個項(xiàng)目,將展示如何設(shè)計一個簡單的圖像處理應(yīng)用程序,該應(yīng)用程序平行處理兩個攝像頭。

本項(xiàng)目主要使用 Digilent PCAM 擴(kuò)展板。PCAM 擴(kuò)展板為最多四個 PCAMS 提供接口。所以只需要有FMC接口的開發(fā)板都可以完成本項(xiàng)目移植。

17780bac-647e-11ed-8abf-dac502259ad0.png

Vivado

為了讓系統(tǒng)快速啟動和運(yùn)行,我們將從賽靈思的一個示例項(xiàng)目開始設(shè)計。要打開參考項(xiàng)目,我們需要首先創(chuàng)建一個針對自己開發(fā)板上 FPGA 的項(xiàng)目。

17c6d43a-647e-11ed-8abf-dac502259ad0.png

打開項(xiàng)目后,創(chuàng)建一個新的BD。

17fba408-647e-11ed-8abf-dac502259ad0.png

打開BD后,在BD中添加一個 MIPI CSI2 IP。

182de486-647e-11ed-8abf-dac502259ad0.png

要打開參考設(shè)計,右鍵單擊 CSI2 IP并選擇打開 IP 示例設(shè)計。

184b90a8-647e-11ed-8abf-dac502259ad0.png

我們將使用這個參考項(xiàng)目。首先要做的是移除 DSI 輸出路徑。這將為我們的圖像處理平臺釋放 FPGA 中的邏輯資源。

下一步是添加以下元素以創(chuàng)建第二條圖像處理通道。

  • CSI2 IP Block
  • Register Slices & concatenation
  • Sensor Demosaic
  • VDMA
  • AXI Switch

完成的設(shè)計應(yīng)如下所示:

1875512c-647e-11ed-8abf-dac502259ad0.png

除了 CSI2 IP 中的設(shè)置外,第二個圖像處理通道與第一個相同。

1899e096-647e-11ed-8abf-dac502259ad0.png

原始 CSI2 IP 設(shè)置

18cf286e-647e-11ed-8abf-dac502259ad0.png

添加的 CSI2 IP 中的設(shè)置

18fc0cb2-647e-11ed-8abf-dac502259ad0.png

VDMA 內(nèi)存設(shè)置

1928b6a4-647e-11ed-8abf-dac502259ad0.png

Sensor Demosaic設(shè)置

1950e188-647e-11ed-8abf-dac502259ad0.png

AXI4 Stream Switch

196e88b4-647e-11ed-8abf-dac502259ad0.png

時鐘有不同的上行和下行時鐘

1999e3a6-647e-11ed-8abf-dac502259ad0.png19b50bea-647e-11ed-8abf-dac502259ad0.png

完成BD設(shè)計接下來就是針對硬件進(jìn)行管腳約束。

一旦完成,我們就可以生成和構(gòu)建項(xiàng)目并導(dǎo)出 XSA 用于軟件開發(fā)。

該設(shè)備的利用率如下:

19e0d5ea-647e-11ed-8abf-dac502259ad0.png

軟件開發(fā)

導(dǎo)出 XSA 后,我們可以創(chuàng)建一個新的 Vitis 項(xiàng)目,其中包含 hello world 應(yīng)用程序。

從 hello world 應(yīng)用程序 BSP 設(shè)置中,我們可以導(dǎo)入 MIPI CSI2 示例項(xiàng)目。

1a039d82-647e-11ed-8abf-dac502259ad0.png

我們需要對這個項(xiàng)目進(jìn)行一些更改。

首先是通過 IIC 與傳感器通信并設(shè)置傳感器。板上的 CSI2 Sensor與FPGA 的 I2C 并沒有直接連接。通過一個I2C BUFFER,與四個sensor連接,因?yàn)閟ensor的地址是一樣的。

這可以在 fucntion_prototpye.c 中提供的傳感器配置函數(shù)中進(jìn)行更改。

所以我們在配置運(yùn)行之前需要選擇多路復(fù)用器

externintSensorPreConfig(intpcam5c_mode){


u32Index,MaxIndex,MaxIndex1,MaxIndex2;
intStatus;
SensorIicAddr=SENSOR_ADDRESS;

u8SP701mux_addr=0x75;
u8SP701mux_ch=0x40;

u8PCAM_FMC_addr=0x70;
u8PCAM_FMC_ch=0x01;


Status=XIic_SetAddress(&IicAdapter,XII_ADDR_TO_SEND_TYPE,SP701mux_addr);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}

WriteBuffer[0]=SP701mux_ch;
Status=AdapterWriteData(1);
if(Status!=XST_SUCCESS){
printf("sp701muxfailed

");
returnXST_FAILURE;
}

Status=XIic_SetAddress(&IicAdapter,XII_ADDR_TO_SEND_TYPE,PCAM_FMC_addr);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}

WriteBuffer[0]=PCAM_FMC_ch;
Status=AdapterWriteData(1);
if(Status!=XST_SUCCESS){
printf("pcammuxfailed

");
returnXST_FAILURE;
}



Status=XIic_SetAddress(&IicAdapter,XII_ADDR_TO_SEND_TYPE,SensorIicAddr);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}


WritetoReg(0x31,0x03,0x11);
WritetoReg(0x30,0x08,0x82);

Sensor_Delay();


MaxIndex=length_sensor_pre;
for(Index=0;Index>8;
WriteBuffer[1]=sensor_pre[Index].Address;
WriteBuffer[2]=sensor_pre[Index].Data;

Sensor_Delay();

Status=AdapterWriteData(3);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}
}


WritetoReg(0x30,0x08,0x42);


MaxIndex1=length_pcam5c_mode1;

for(Index=0;Index>8;
WriteBuffer[1]=pcam5c_mode1[Index].Address;
WriteBuffer[2]=pcam5c_mode1[Index].Data;

Sensor_Delay();

Status=AdapterWriteData(3);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}
}


WritetoReg(0x30,0x08,0x02);
Sensor_Delay();
WritetoReg(0x30,0x08,0x42);


MaxIndex2=length_sensor_list;

for(Index=0;Index>8;
WriteBuffer[1]=sensor_list[Index].Address;
WriteBuffer[2]=sensor_list[Index].Data;

Sensor_Delay();

Status=AdapterWriteData(3);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}
}


if(Status!=XST_SUCCESS){
xil_printf("Error:inWritingentrystatus=%x
",Status);
returnXST_FAILURE;
}

returnXST_SUCCESS;

}

由于我們添加了第二個 Demosaic,我們還需要更新其配置。

intdemosaic()
{
demosaic_Config=XV_demosaic_LookupConfig(DEMOSAIC_DEVICE_ID);
XV_demosaic_CfgInitialize(&InstancePtr,demosaic_Config,
demosaic_Config->BaseAddress);
XV_demosaic_Set_HwReg_width(&InstancePtr,1920);
XV_demosaic_Set_HwReg_height(&InstancePtr,1080);
XV_demosaic_Set_HwReg_bayer_phase(&InstancePtr,0x3);
XV_demosaic_EnableAutoRestart(&InstancePtr);
XV_demosaic_Start(&InstancePtr);

demosaic_Config1=XV_demosaic_LookupConfig(DEMOSAIC_DEVICE1_ID);
XV_demosaic_CfgInitialize(&InstancePtr1,demosaic_Config1,
demosaic_Config1->BaseAddress);
XV_demosaic_Set_HwReg_width(&InstancePtr1,1920);
XV_demosaic_Set_HwReg_height(&InstancePtr1,1080);
XV_demosaic_Set_HwReg_bayer_phase(&InstancePtr1,0x3);
XV_demosaic_EnableAutoRestart(&InstancePtr1);
XV_demosaic_Start(&InstancePtr1);
returnXST_SUCCESS;

}

最后階段是設(shè)置第二個 DMA,這里必須注意 DDR3地址管理以確保幀不會相互重疊。

intvdma_hdmi(){

InitVprocSs_CSC(1);

ResetVDMA();

RunVDMA(&AxiVdma,XPAR_AXI_VDMA_0_DEVICE_ID,HORIZONTAL_RESOLUTION,
VERTICAL_RESOLUTION,srcBuffer,FRAME_COUNTER,0);

RunVDMA(&AxiVdma1,XPAR_AXI_VDMA_1_DEVICE_ID,HORIZONTAL_RESOLUTION,
VERTICAL_RESOLUTION,srcBuffer1,FRAME_COUNTER,0);

returnXST_SUCCESS;

}

我們還需要注釋掉 DSI 和TPG等函數(shù)使用的任何代碼。

主代碼也需要更新,以便在串口命令下控制 AXI Switch。

/******************************************************************************
*Copyright(C)2018-2022Xilinx,Inc.Allrightsreserved.
*SPDX-License-Identifier:MIT
*******************************************************************************/

/*****************************************************************************/
/**
*
*@filexmipi_sp701_example.c
*
*
*MODIFICATIONHISTORY:
*
*VerWhoDateChanges
*---------------------------------------------------------------------
*X.XXXXYY/MM/DD
*1.00RHe19/09/20Initialrelease.
*
* ******************************************************************************/ /*****************************IncludeFiles*********************************/ #include"xparameters.h" #include"xiic.h" #include"xil_exception.h" #include"function_prototype.h" #include"pcam_5C_cfgs.h" #include"xstatus.h" #include"sleep.h" #include"xiic_l.h" #include"xil_io.h" #include"xil_types.h" //#include"xv_tpg.h" #include"xil_cache.h" #include"stdio.h" #include"xaxis_switch.h" /**************************ConstantDefinitions*****************************/ #definePAGE_SIZE16 #defineXAXIS_SWITCH_DEVICE_IDXPAR_AXIS_SWITCH_0_DEVICE_ID #defineIIC_BASE_ADDRESSXPAR_IIC_2_BASEADDR #defineEEPROM_TEST_START_ADDRESS0x80 #defineIIC_SWITCH_ADDRESS0x74 #defineIIC_ADV7511_ADDRESS0x39 //XV_tpg_Config*tpg1_Config;XV_tpg_Config*tpg1_Config; //XV_tpgtpg1; //XV_tpgtpg1; typedefu8AddressType; typedefstruct{ u8addr; u8data; u8init; }HDMI_REG; #defineNUMBER_OF_HDMI_REGS16 HDMI_REGhdmi_iic[NUMBER_OF_HDMI_REGS]={ {0x41,0x00,0x10}, {0x98,0x00,0x03}, {0x9A,0x00,0xE0}, {0x9C,0x00,0x30}, {0x9D,0x00,0x61}, {0xA2,0x00,0xA4}, {0xA3,0x00,0xA4}, {0xE0,0x00,0xD0}, {0xF9,0x00,0x00}, {0x18,0x00,0xE7}, {0x55,0x00,0x00}, {0x56,0x00,0x28}, {0xD6,0x00,0xC0}, {0xAF,0x00,0x4}, {0xF9,0x00,0x00} }; u8EepromIicAddr;/*VariableforstoringEepromIICaddress*/ intIicLowLevelDynEeprom(); u8EepromReadByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount); u8EepromWriteByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount); /****************i************TypeDefinitions*******************************/ typedefu8AddressType; /**************************VariableDefinitions*****************************/ externXIicIicFmc,IicAdapter;/*IICdevice.*/ //HDMIIIC intIicLowLevelDynEeprom() { u8BytesRead; u32StatusReg; u8Index; intStatus; u32i; EepromIicAddr=IIC_SWITCH_ADDRESS; Status=XIic_DynInit(IIC_BASE_ADDRESS); if(Status!=XST_SUCCESS){ returnXST_FAILURE; } xil_printf(" AfterXIic_DynInit "); while(((StatusReg=XIic_ReadReg(IIC_BASE_ADDRESS, XIIC_SR_REG_OFFSET))& (XIIC_SR_RX_FIFO_EMPTY_MASK| XIIC_SR_TX_FIFO_EMPTY_MASK| XIIC_SR_BUS_BUSY_MASK))!= (XIIC_SR_RX_FIFO_EMPTY_MASK| XIIC_SR_TX_FIFO_EMPTY_MASK)){ } EepromIicAddr=IIC_ADV7511_ADDRESS; for(Index=0;Indexfor(Index=0;Indexfor(i=0;i<1000;i++)?{};?//?IIC?delay ?if(BytesRead!=1){ returnXST_FAILURE; } } returnXST_SUCCESS; } /*****************************************************************************/ /** *ThisfunctionwritesabufferofbytestotheIICserialEEPROM. * *@paramBufferPtrcontainstheaddressofthedatatowrite. *@paramByteCountcontainsthenumberofbytesinthebuffertobe *written.Notethatthisshouldnotexceedthepagesizeofthe *EEPROMasnotedbytheconstantPAGE_SIZE. * *@returnThenumberofbyteswritten,avaluelessthanthatwhichwas *specifiedasaninputindicatesanerror. * *@noteone. * ******************************************************************************/ u8EepromWriteByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount) { u8SentByteCount; u8WriteBuffer[sizeof(Address)+PAGE_SIZE]; u8Index; /* *Atemporarywritebuffermustbeusedwhichcontainsboththeaddress *andthedatatobewritten,puttheaddressinfirstbaseduponthe *sizeoftheaddressfortheEEPROM */ if(sizeof(AddressType)==2){ WriteBuffer[0]=(u8)(Address>>8); WriteBuffer[1]=(u8)(Address); }elseif(sizeof(AddressType)==1){ WriteBuffer[0]=(u8)(Address); EepromIicAddr|=(EEPROM_TEST_START_ADDRESS>>8)&0x7; } /* *Putthedatainthewritebufferfollowingtheaddress. */ for(Index=0;IndexreturnSentByteCount-sizeof(Address); } /****************************************************************************** * *ThisfunctionreadsanumberofbytesfromtheIICserialEEPROMintoa *specifiedbuffer. * *@paramBufferPtrcontainstheaddressofthedatabuffertobefilled. *@paramByteCountcontainsthenumberofbytesinthebuffertoberead. *Thisvalueisconstrainedbythepagesizeofthedevicesuch *thatupto64Kmaybereadinonecall. * *@returnThenumberofbytesread.Avaluelessthanthespecifiedinput *valueindicatesanerror. * *@noteNone. * ******************************************************************************/ u8EepromReadByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount) { u8ReceivedByteCount; u8SentByteCount; u16StatusReg; /* *PositiontheReadpointertospecificlocationintheEEPROM. */ do{ StatusReg=XIic_ReadReg(IIC_BASE_ADDRESS,XIIC_SR_REG_OFFSET); if(!(StatusReg&XIIC_SR_BUS_BUSY_MASK)){ SentByteCount=XIic_DynSend(IIC_BASE_ADDRESS,EepromIicAddr, (u8*)&Address,sizeof(Address),XIIC_REPEATED_START); } }while(SentByteCount!=sizeof(Address)); /* *Receivethedata. */ ReceivedByteCount=XIic_DynRecv(IIC_BASE_ADDRESS,EepromIicAddr, BufferPtr,ByteCount); /* *ReturnthenumberofbytesreceivedfromtheEEPROM. */ returnReceivedByteCount; } /*****************************************************************************/ /** * *MainfunctiontoinitializeinteropsystemandreaddatafromAR0330sensor *@paramNone. * *@return *-XST_SUCCESSifMIPIInteropwassuccessful. *-XST_FAILUREifMIPIInteropfailed. * *@noteNone. * ******************************************************************************/ intmain(){ intStatus; intpcam5c_mode=1; intusr_entry,prev_sel; intdefault_input; intdsi_hdmi_select=0; Xil_ICacheDisable(); Xil_DCacheDisable(); XAxis_SwitchAxisSwitch; XAxis_Switch_Config*ASWConfig; ASWConfig=XAxisScr_LookupConfig(XAXIS_SWITCH_DEVICE_ID); XAxisScr_CfgInitialize(&AxisSwitch,ASWConfig,ASWConfig->BaseAddress); XAxisScr_RegUpdateDisable(&AxisSwitch); XAxisScr_MiPortDisableAll(&AxisSwitch); XAxisScr_MiPortEnable(&AxisSwitch,0,0); XAxisScr_RegUpdateEnable(&AxisSwitch); xil_printf(" ****************************************************** "); xil_printf(" **SP701ExampleDesign**"); Status=IicLowLevelDynEeprom(); if(Status!=XST_SUCCESS){ xil_printf("ADV7511IICprogrammingFAILED "); returnXST_FAILURE; } xil_printf("ADV7511IICprogrammingPASSED "); //InitializeFMC,AdapterandSensorIIC Status=InitIIC(); if(Status!=XST_SUCCESS){ xil_printf(" IICinitializationFailed "); returnXST_FAILURE; } xil_printf("IICInitializtionDone "); //InitializeFMCInterruptSystem Status=SetupFmcInterruptSystem(&IicFmc); if(Status!=XST_SUCCESS){ xil_printf(" InterruptSystemInitializationFailed "); returnXST_FAILURE; } xil_printf("FMCInterruptSystemInitializationDone "); //SetupIICInterruptHandlers SetupIICIntrHandlers(); xil_printf("IICInterruptHandlersSetupDone "); Status=SetFmcIICAddress(); if(Status!=XST_SUCCESS){ xil_printf(" FMCIICAddressSetupFailed "); returnXST_FAILURE; } xil_printf("FmcIICAddressSet "); //InitializeAdapterInterruptSystem Status=SetupAdapterInterruptSystem(&IicAdapter); if(Status!=XST_SUCCESS){ xil_printf(" InterruptSystemInitializationFailed "); returnXST_FAILURE; } xil_printf("AdapterInterruptSystemInitializationDone "); //SetAddressofAdapterIIC Status=SetAdapterIICAddress(); if(Status!=XST_SUCCESS){ xil_printf(" AdapterIICAddressSetupFailed "); returnXST_FAILURE; } xil_printf("AdapterIICAddressSet "); Status=InitializeCsiRxSs(); if(Status!=XST_SUCCESS){ xil_printf("CSIRxSsInitfailedstatus=%x. ",Status); returnXST_FAILURE; } dsi_hdmi_select=0; //usingdefault_inputvartocomparesameoptionselection default_input=1; //SetupDSI(); resetIp(); EnableCSI(); GPIOSelect(dsi_hdmi_select); Status=demosaic(); if(Status!=XST_SUCCESS){ xil_printf(" DemosaicFailed "); returnXST_FAILURE; } CamReset(); //PreconifgureSensor Status=SensorPreConfig(pcam5c_mode); if(Status!=XST_SUCCESS){ xil_printf(" SensorPreConfigurationFailed "); returnXST_FAILURE; } xil_printf(" Sensor1isPreConfigured "); WritetoReg(0x30,0x08,0x02); //PreconifgureSensor Status=SensorPreConfig1(pcam5c_mode); if(Status!=XST_SUCCESS){ xil_printf(" SensorPreConfigurationFailed "); returnXST_FAILURE; } xil_printf(" Sensor2isPreConfigured "); WritetoReg(0x30,0x08,0x02); Status=vdma_hdmi(); if(Status!=XST_SUCCESS){ xil_printf(" Vdma_hdmiFailed "); returnXST_FAILURE; } Status=vtpg_hdmi(); if(Status!=XST_SUCCESS){ xil_printf(" VtpgFailed "); returnXST_FAILURE; } Sensor_Delay(); xil_printf(" PipelineConfigurationCompleted "); while(1){ xil_printf(" PleaseSelectCamera(1or2)+ENTER:"); usr_entry=getchar(); charb; scanf("%c",&b);//ThiswilltakeENTERkey switch(usr_entry){ case'1': xil_printf(" SwitchingtoCamera1 "); XAxisScr_RegUpdateDisable(&AxisSwitch); XAxisScr_MiPortDisableAll(&AxisSwitch); XAxisScr_MiPortEnable(&AxisSwitch,0,0); XAxisScr_RegUpdateEnable(&AxisSwitch); break; case'2': xil_printf(" SwitchingtoCamera1 "); XAxisScr_RegUpdateDisable(&AxisSwitch); XAxisScr_MiPortDisableAll(&AxisSwitch); XAxisScr_MiPortEnable(&AxisSwitch,0,1); XAxisScr_RegUpdateEnable(&AxisSwitch); break; default: xil_printf(" Selectionisunavailable.Pleasetryagain "); break; } } returnXST_SUCCESS; }

測試

我們可以在連接到 HDMI 輸出時運(yùn)行應(yīng)用程序并在顯示器上看到圖像。

使用應(yīng)用程序選擇圖像。

1a4ac248-647e-11ed-8abf-dac502259ad0.png1a783606-647e-11ed-8abf-dac502259ad0.png1ab90ffa-647e-11ed-8abf-dac502259ad0.png1b3be4de-647e-11ed-8abf-dac502259ad0.png

參考

https://www.hackster.io/

總結(jié)

該項(xiàng)目展示了一個MIPI攝像頭接入FPGA的簡單、快捷的方式,同時可以學(xué)習(xí)一下軟件的導(dǎo)入工程的方式,簡單的基于MicroBlaze系統(tǒng)要學(xué)會自己寫控制代碼,也許這就是新一代“FPGA打工人”需要掌握的一項(xiàng)新技術(shù)吧~(doge~不是)

示例工程

https://github.com/ATaylorCEngFIET/Hackster/tree/master

https://github.com/ATaylorCEngFIET/SP701_Imaging_Vivado


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21805

    瀏覽量

    606556
  • 攝像頭
    +關(guān)注

    關(guān)注

    60

    文章

    4872

    瀏覽量

    96441
  • 圖像系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7082

原文標(biāo)題:示例工程

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    米爾瑞芯微RK3576實(shí)測輕松搞定三屏八攝像頭

    屏異顯: LVDS實(shí)現(xiàn)接10寸觸摸屏:輸出內(nèi)容為是通過開啟瀏覽器引擎訪問米爾網(wǎng)頁 MINI DP接27寸顯示器:輸出內(nèi)容為8路攝像頭捕捉圖像預(yù)覽 HDMI接15寸HDMI顯示器:輸出以基于QT開發(fā)
    發(fā)表于 01-17 11:33

    安防監(jiān)控攝像頭氣密性測試案例-連拓精密#攝像頭氣密檢測設(shè)備

    攝像頭
    連拓精密科技
    發(fā)布于 :2024年12月11日 15:00:21

    積水自動監(jiān)控攝像頭

    城市管理中的一項(xiàng)重要科技創(chuàng)新。積水監(jiān)測系統(tǒng)主要通過安裝在關(guān)鍵路段、排水口和易積水區(qū)域的攝像頭,對降雨和積水情況進(jìn)行實(shí)時監(jiān)控。這些攝像頭配備了先進(jìn)的圖像識別技術(shù),能夠
    的頭像 發(fā)表于 12-09 11:13 ?314次閱讀
    積水自動監(jiān)控<b class='flag-5'>攝像頭</b>

    攝像頭及紅外成像的基本工作原理

    本文介紹了攝像頭及紅外成像的基本工作原理,攝像頭可以將看到的圖像真實(shí)的呈現(xiàn)出來,所見即所得! 攝像頭如何工作? 攝像頭可以將看到的
    的頭像 發(fā)表于 11-25 09:28 ?941次閱讀
    <b class='flag-5'>攝像頭</b>及紅外成像的基本工作原理

    飛凌嵌入式-ELFBOARD-OV5640攝像頭簡介

    OV5640采用了CMOS圖像傳感器,也是我們ELF 1以及ELF 1S適配的攝像頭。OV5640為500w像素級攝像頭,最高支持2592x1944@15fps(QSXGA)【圖像有效
    發(fā)表于 11-18 11:14

    飛凌嵌入式-ELFBOARD-OV5640攝像頭簡介第一期

    OV5640采用了CMOS圖像傳感器,也是我們ELF 1以及ELF 1S適配的攝像頭。OV5640為500w像素級攝像頭,最高支持2592x1944@15fps(QSXGA)【圖像有效
    發(fā)表于 11-18 11:09

    《DNK210使用指南 -CanMV版 V1.0》第二十七章 攝像頭圖像調(diào)整實(shí)驗(yàn)

    第二十七章 攝像頭圖像調(diào)整實(shí)驗(yàn) 在上一章中,介紹了如何在CanMV下配置攝像頭輸出特定大小和格式的畫面,并獲取攝像頭輸出的圖像數(shù)據(jù)將其在LC
    發(fā)表于 10-24 09:48

    《DNK210使用指南 -CanMV版 V1.0》第二十六章 攝像頭圖像捕獲實(shí)驗(yàn)

    第二十六章 攝像頭圖像捕獲實(shí)驗(yàn) 本章將介紹CanMV下攝像頭的使用,能通過攝像頭實(shí)時地采集攝像頭捕獲到的
    發(fā)表于 10-23 10:05

    用于環(huán)視和CMS攝像頭系統(tǒng)的四通道攝像頭應(yīng)用程序

    電子發(fā)燒友網(wǎng)站提供《用于環(huán)視和CMS攝像頭系統(tǒng)的四通道攝像頭應(yīng)用程序.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 10:02 ?0次下載
    用于環(huán)視和CMS<b class='flag-5'>攝像頭</b><b class='flag-5'>系統(tǒng)</b>的四通道<b class='flag-5'>攝像頭</b>應(yīng)用程序

    基于RK3588J的6路MIPI CSI視頻采集案例分享,多路視頻系統(tǒng)必看!

    等比例拼接形式采集畫面,且攝像頭幀率需統(tǒng)一,因此攝像頭分辨率幀率均使用1920x1080@30fps。 RK3588J的MIPI CSI介紹RK3588J的MIPI CSI接口介紹如下
    發(fā)表于 08-22 11:51

    如何通過RK3576配置MIPI-CSI攝像頭的不同輸出格式

    MIPI-CSI是一種在嵌入式系統(tǒng)或移動設(shè)備中常見的攝像頭接口,能夠?qū)崿F(xiàn)高速的圖像數(shù)據(jù)傳輸。飛凌嵌入式最新推出的OK3576-C開發(fā)板擁有豐富的資源接口,其中支持5個CSI-2接口,意
    發(fā)表于 07-25 09:56

    基于FPGA的攝像頭心率檢測裝置設(shè)計

    時間很長,且對環(huán)境要求較為嚴(yán)格。 基此,我們對其算法進(jìn)行優(yōu)化,設(shè)計出更快運(yùn)算速度, 可在更復(fù)雜環(huán)境較準(zhǔn)確測心率的攝像頭心率檢測裝置。本系統(tǒng)著眼機(jī)器視覺,是集合圖像處理技術(shù)、HDMI 顯示技術(shù)的智能
    發(fā)表于 07-01 17:58

    智能攝像頭抄表器是什么?

    1.概念理解:智能攝像頭抄表器智能攝像頭抄表器是一種融合了人工智能和物聯(lián)網(wǎng)技術(shù)的創(chuàng)新設(shè)備,主要用于自動讀取和記錄各種計量儀表的數(shù)據(jù),如水表、電表、燃?xì)獗淼取Kㄟ^高清攝像頭捕捉圖像,然
    的頭像 發(fā)表于 04-24 14:14 ?751次閱讀
    智能<b class='flag-5'>攝像頭</b>抄表器是什么?

    攝像頭各標(biāo)定參數(shù)的作用

    車載攝像頭的畸變矩陣描述了攝像頭鏡頭造成的畸變,主要包括徑向畸變和切向畸變等參數(shù)。畸變矩陣的作用是對圖像進(jìn)行畸變校正,使其更符合幾何規(guī)律,提高圖像的準(zhǔn)確性和質(zhì)量。
    的頭像 發(fā)表于 03-21 11:11 ?1054次閱讀
    <b class='flag-5'>攝像頭</b>各標(biāo)定參數(shù)的作用
    主站蜘蛛池模板: 国产香港日本三级在线观看 | 欧美成人 一区二区三区 | 人操人碰 | 女bbbbxxxx另类亚洲 | 奇米成人影视 | 国产一区二区高清在线 | 香蕉狠狠再啪线视频 | 日日摸人人拍人人澡 | 亚洲午夜精品久久久久久人妖 | 免费欧洲美女与动zooz | 在线观看免费av网站 | 天天靠天天擦天天摸 | 欧美一区二区三区在线观看 | 天天干天天色天天干 | 香港经典a毛片免费观看爽爽影院 | av 狼| 噜噜色.com | 一级做a爱过程免费视 | 开心激情婷婷 | 日韩一级片在线播放 | 1024手机在线观看视频 | 色综合 成人 | 一级毛片免费网站 | 日本三级成人午夜视频网 | 丁香花在线观看免费观看 | 91av在线免费观看 | 久久影院午夜伦手机不四虎卡 | 久久久免费视频观看 | 丰满年轻岳欲乱中文字幕 | 午夜久久免费视频 | 性刺激的欧美三级视频 | 欧美性白人极品1819hd高清 | 日韩a无吗一区二区三区 | 黄色美女网站在线观看 | 一区二区三区四区免费视频 | 亚洲视频精选 | 在线观看不卡一区 | 美女扒开尿口给男人桶视频免费 | 最新亚洲人成网站在线影院 | 毛片网子| sihu影院永久在线影院 |