色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

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

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

介紹

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

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

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

Vivado

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

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

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

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

打開BD后,在BD中添加一個(gè) MIPI CSI2 IP。

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

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

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

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

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

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

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

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

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

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

時(shí)鐘有不同的上行和下行時(shí)鐘

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

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

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

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

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

軟件開發(fā)

導(dǎo)出 XSA 后,我們可以創(chuàng)建一個(gè)新的 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

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

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

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

所以我們?cè)谂渲眠\(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;

}

由于我們添加了第二個(gè) 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è)置第二個(gè) DMA,這里必須注意 DDR3地址管理以確保幀不會(huì)相互重疊。

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; }

測(cè)試

我們可以在連接到 HDMI 輸出時(shí)運(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)目展示了一個(gè)MIPI攝像頭接入FPGA的簡(jiǎn)單、快捷的方式,同時(shí)可以學(xué)習(xí)一下軟件的導(dǎo)入工程的方式,簡(jiǎn)單的基于MicroBlaze系統(tǒng)要學(xué)會(huì)自己寫控制代碼,也許這就是新一代“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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21794

    瀏覽量

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

    關(guān)注

    60

    文章

    4860

    瀏覽量

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

    關(guān)注

    0

    文章

    10

    瀏覽量

    7075

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    屏異顯: 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)控攝像頭氣密性測(cè)試案例-連拓精密#攝像頭氣密檢測(cè)設(shè)備

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

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

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

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

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

    飛凌嵌入式-ELFBOARD-OV5640攝像頭簡(jiǎn)介

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

    飛凌嵌入式-ELFBOARD-OV5640攝像頭簡(jiǎn)介第一期

    OV5640采用了CMOS圖像傳感器,也是我們ELF 1以及ELF 1S適配的攝像頭。OV5640為500w像素級(jí)攝像頭,最高支持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í)時(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

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

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

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

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

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

    車載攝像頭的畸變矩陣描述了攝像頭鏡頭造成的畸變,主要包括徑向畸變和切向畸變等參數(shù)。畸變矩陣的作用是對(duì)圖像進(jìn)行畸變校正,使其更符合幾何規(guī)律,提高圖像的準(zhǔn)確性和質(zhì)量。
    的頭像 發(fā)表于 03-21 11:11 ?992次閱讀
    <b class='flag-5'>攝像頭</b>各標(biāo)定參數(shù)的作用

    攝像頭凸透鏡成像原理 攝像的原理是小孔成像嗎

    攝像頭是一種利用透鏡和圖像傳感器的設(shè)備,能夠?qū)⒐鈱W(xué)圖像轉(zhuǎn)化為電子信號(hào),并將其傳輸?shù)诫娔X或其他設(shè)備上進(jìn)行記錄和處理。攝像頭的工作原理主要涉及透鏡成像原理和
    的頭像 發(fā)表于 02-01 15:01 ?2057次閱讀
    主站蜘蛛池模板: 老师洗澡让我吃她胸的视频 | BL全肉多攻NP高H| 把腿张开再深点好爽宝贝 | 久久人妻少妇嫩草AV无码| 色偷偷影院| 97在线精品视频| 寂寞夜晚在线视频观看| 日本久久久久久久做爰片日本| 亚洲欧美日韩人成| 边吃胸边膜下床震免费版视频| 精品国产高清自在线看| 三级视频黄色| 97人人碰免费视频公开| 精品国产成人a区在线观看| 色狠狠xx| 99久久亚洲| 久久亚洲精品成人综合| 学生精品国产在线视频| 被室友C哭调教双性| 欧美伦理片第7页| 91黄色影院| 久久亚洲精品中文字幕| 亚洲人成在线播放网站岛国| 国产精品亚洲欧美一区麻豆| 日日做夜夜欢狠狠免费软件| 把极品白丝班长啪到腿软| 男人把女人桶到爽免费看视频 | 丝瓜视频樱桃视频在线观看免费 | chinesedaddy80老年人| 久久re热在线视频精6| 学生妹被爆插到高潮无遮挡| 国产精品JIZZ在线观看A片| 区产品乱码芒果精品P站在线| 99国产精品| 男女疯狂一边摸一边做羞羞视频| 一手揉着乳头一手模仿抽插视频| 国产综合视频在线观看一区| 亚洲精品乱码电影在线观看| 国内免费视频成人精品| 最近的中文字幕免费完整| 亚洲日本欧美日韩高观看|