C# 相機內存復用(減少圖像采集耗時)以及行數復用

背景

我們在做圖像處理時,都會對一些相機的SDK進行開發完成圖像采集的操作,為后續圖像處理做準備。本文主要的目的是降低圖像采集的耗時,應用在一些高速檢測的場景下。利用循環隊列+內存復用的方式,去掉或者減少新建內存的時間。

線掃描相機

線掃描相機會將采集到的1-N行打包回工控機中,由SDK將這些行的數據拷貝到內部的循環隊列中。

正常流程:

1)相機SDK給出完成回調

2)軟件拷貝根據圖像大小和通道數拷貝指針數據

3)圖像處理。

該流程在2)的時候需要執行 new memory / copy memory的操作,我們現在的步驟就是需要簡化掉這兩步,有以下兩種優化方案。

優化方案一

新建循環隊列,每次只執行copy動作,耗時減少一半

1)相機SDK給出完成回調

2)循環隊列獲取當前圖像

3)拷貝內存至當前圖像上

4)循環隊列移至下一張圖像

5)圖像處理

優化方案二

新建循環隊列,將循環隊列個數和指針直接設置進SDK中(這個需要相機廠家支持,SDK內部隊列可以由用戶設置),整體耗時為0ms

拿IKAP(埃科)的相機舉例,設置SDK內部隊列的方式如下:

 IKapBoardClassLibrary.IKapBoard.IKapSetBufferAddress(m_ptrBoard, ptrs.Count, ptr); //采集卡

1)相機SDK給出完成回調

2)直接根據相機給出的圖像指針找到 循環隊列中的圖像

3)圖像處理

4)只針對黑白圖像,彩色圖像還是執行新建吧,因為halcon的這個存儲格式獲取彩色圖像指針時是三個指針,而相機SDK給出的指針一般是 RGBRGB這樣的格式,去做這個拆包循環有點得不償失了

注意事項

1)以上兩種方式都需要用到循環隊列,要注意一個循環內要把圖像處理完成

2)建議把 queue的size開大一些,拿內存去換時間

3)需要長時間保留在內存的圖片,建議直接執行copy再自行刪除

面陣相機

面陣相機的方案跟線掃描的方案一是一致的,方案二的方式可以嘗試一下(我沒有試過,因為面陣一般來說圖比較小,創建耗時比較低,沒去特地做優化)

線掃描相機行數復用

優化方案

這個功能主要是用在循環拍攝時,當前圖片需要上一張圖像尾巴上的固定若干行信息,按照以下方式,整體的內存拷貝效率高,只需要拷貝復用的行數即可。

我們可以把這個步驟直接做到相機中,可以參考線掃描相機的優化的兩個點,在這直接加一些邏輯。

先假設相機SDK設置的圖像是 8192*3000,復用的行數是100.

1)首先,如果我們需要復用100行上一張的圖像,我們在制作圖像指針時要制作比SDK設置圖像的高度+100,那么我們需要做 8192*3100的圖像指針出來。

2)在設置指針給SDK時,需要對指針進行偏移 100行,這樣相機能正常的采集圖像并拷貝進指針中

3)每次采集完成回調后,需要將上一張圖的尾巴100行的指針拷貝到當前圖像的前100行中

4)圖像處理

注意事項

1、第一張圖頭部幾行會是全黑的,這里建議判斷是否是第一張圖像,如果是的話,給圖的時候做指針偏移給3000行的圖,這樣可以避免第一張圖的異常

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96860.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MTK Linux DRM分析(十三)- Mediatek KMS實現mtk_drm_drv.c(Part.1)

一、簡介 MediaTek (MTK) 的DRM驅動(基于mtk_drm_drv.c)是為MediaTek SoC(如MT6985、MT6895等)設計的顯示子系統(Display Subsystem)驅動程序。它實現了Linux DRM/KMS框架,支持多CRTC、多平面(plane)、連接器(connector)和編碼器(encoder)的顯示管道。驅動處理硬…

Wireshark筆記-DHCP流程與數據包解析

背景DHCP從大學上網絡課時就開始知道了,當時只知道,能讓計算機上網,要不就靜態配IP,要不就DHCP獲取,就能上網。2021年時,畢業好幾年了,想學習下網絡知識,就準備考一個軟考網工。按要…

Coze用戶賬號設置修改用戶頭像-前端源碼

概述 Coze Studio的用戶頭像修改功能是用戶賬號設置中的重要組成部分,允許用戶上傳和更新個人頭像。本文將深入分析該功能的前端實現,包括組件架構、文件上傳處理、API設計和用戶體驗優化等方面。 技術架構 整體架構設計 Coze Studio采用現代化的前端架構…

新手Github提交PR(Pull requests)詳細教程

一、什么是Pull requests? Pull Requests(PR)是代碼協作平臺(如 GitHub、GitLab 等)中的一種功能,用于提議將某分支的代碼變更合并到另一個分支(通常是主分支)。它允許開發者在合并…

本地通過跳板機連接無公網IP的內網服務器

本地環境:SSH client 堡壘機:有公網IP,有連接內網服務器的秘鑰 SSH配置: Host jmsHostName [堡壘機的公網IP]Port 22User rootIdentityFile ~/.ssh/id_rsaHost appHostName 10.0.0.14Port 22User rootIdentityFile ~/.ssh/svc-p…

B樹,B+樹,B*樹

下面我們來詳細講解一下 B樹、B樹、B*樹 這三種非常重要的多路平衡查找樹。它們在數據庫和文件系統中有著極其廣泛的應用。一、為什么需要這些樹結構?在開始之前,我們先思考一個問題:為什么已經有了二叉搜索樹(BST)、A…

汽車零部件工廠ESOP系統工業一體機如何選型

在汽車零部件工廠的生產管理中,ESOP 系統發揮著至關重要的作用。而工業一體機作為 ESOP 系統的關鍵硬件支撐,其選型的合理性直接關系到生產效率的提升、生產過程的精準控制以及生產數據的可靠采集與分析。因此,為汽車零部件工廠選擇一款適合的…

?維基框架 (Wiki Framework) 1.1.0 版本發布? 提供多模型AI輔助開發

介紹 多模型AI輔助開發? 維基框架1.1.0集成了主流AI引擎的統一接口,支持開發者按需調用不同模型的優勢能力: ?DeepSeek?:專注代碼生成與重構,擅長復雜業務邏輯實現 ?ChatGPT?:多模態推理能力,適用于…

LabVIEW調用MATLAB 的分形生成

LabVIEW 調用 MATLAB,可借前者可視化流程與硬件交互優勢,結合后者強數值計算、算法能力,復用成熟算法提速開發,還能靈活改代碼。但需匹配版本、裝運行環境,數據傳遞有性能損耗,腳本出錯需跨軟件調試。?優點…

ubuntu20.04開發ros2,使用docker安裝部署的詳細教程

學習docker的教程:可以直接在菜鳥教程上學習即可階段 0:系統檢查| 內容 | 建議 | |------|------| | 操作系統 | Ubuntu 22.04(與 ROS2 Humble 最匹配) | | 用戶權限 | 能執行 sudo |🧩 階段 1:在 Ubuntu 上…

SQL Server縮小日志文件.ldf的方法(適用于開發環境)

SQL Server縮小日志文件.ldf的方法(適用于開發環境) 核心概念:為什么日志文件會變大? 首先,理解原因至關重要。事務日志文件在以下情況下會增長: 大量操作:執行了大批量插入、更新或刪除操作&am…

2.3零基礎玩轉uni-app輪播圖:從入門到精通 (咸蝦米總結)

還在uni-app中的輪播圖組件頭疼嗎?看完這篇,讓你輕松掌握swiper的所有秘密!輪播圖的重要性 在現代移動應用開發中,輪播圖(Swiper)已成為展示焦點內容、廣告推廣和產品展示的首選組件。無論是電商平臺的商品…

FPGA學習筆記——AHT20溫濕度讀取并在串口顯示(IIC協議)

目錄 一、任務 二、分析 1.需要了解的 2.需要用到的模塊 3.流程分析 三、Visio圖 四、代碼 五、實驗現象 一、任務 使用IIC協議通信的AHT20,將溫濕度數據讀取出來,并在串口助手上顯示。 二、分析 1.需要了解的 需要了解IIC協議簡介 也可以看看E…

Pycharm SSH連接

添加遠程服務器文件——>設置——>項目下的Python解釋器——>添加解釋器——>SSH在彈出的彈窗中,輸入遠程的主機、端口和用戶名、一直下一步,得到如下圖所示的結果:選擇Conda 環境:第一步選擇Conda環境;第…

c# 讀取xml文件內的數據

好多大型的項目&#xff0c;把一些固定的參數都存在 xml文件里。創建c# winfom 項目&#xff0c;test_xml創建resources文件夾存放xml文件創建parameters.xml文件<root><test_xml><param name "threshold" value "128"/><param name …

Legion Y7000P IRX9 DriveList

Legion Y7000P IRX9 DriveList 聯想Y7000P驅動列表 驅動列表 intelwlan-TYY5057FK6MQBRF0.exe NVVGA-TYY5057F3M0H9RF0.exe RTKwlan-TYY5077FFSNECRF0.exe audio-TYY5057F4N1JARF0.exe chipset-TYY5037FB10X3RF0.exe hdr-TYY5027FXNF9AWF0.exe intelVGA-TYY5057F5R9J7RF…

編程與數學 02-017 Python 面向對象編程 23課題、測試面向對象的程序

編程與數學 02-017 Python 面向對象編程 23課題、測試面向對象的程序一、單元測試&#xff08;Unit Testing&#xff09;使用 unittest 模塊使用 pytest二、集成測試&#xff08;Integration Testing&#xff09;三、模擬對象&#xff08;Mocking&#xff09;四、測試驅動開發&…

[React]Antd Cascader組件地區選擇

前言表單中添加一個地區選擇功能&#xff0c;要求支持增刪改查功能。Cascader 使用Cascader組件動態加載地區選項。使用 loadData 實現動態加載選項&#xff0c;&#xff08;loadData 與 showSearch 無法一起使用&#xff09;。 這里使用了Form.Item組件。 <Form.Itemlabel{…

深度學習-----《PyTorch神經網絡高效訓練與測試:優化器對比、激活函數優化及實戰技巧》

一、訓練過程并行批量訓練機制一次性輸入64個批次數據&#xff0c;創建64個獨立神經網絡并行訓練。所有網絡共享參數&#xff08;Ω&#xff09;&#xff0c;更新時計算64個批次的平均損失&#xff0c;統一更新全局參數。梯度更新策略使用torch.no_grad()上下文管理器清理反向傳…

Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;五&#xff09;&#xff1a;plt.pie() - 展示組成部分的餅圖一、 餅圖是什么&#xff1f;何時使用&#xff08;何時避免&#xff09;&#xff1f;二、 函數原型與核心參數三、 從入門到精通&#x…