Kithara和OpenCV (一)

Kithara使用 OpenCV


目錄

  • Kithara使用 OpenCV
    • 簡介
    • 需求和支持的環境
    • 構建 OpenCV 庫
      • 使用 CMake 進行配置以與 Kithara 一起工作
    • 使用 OpenCV 庫設置項目
    • 運行 OpenCV 代碼
    • 圖像采集和 OpenCV
    • 自動并行化
    • 限制和局限性
      • 1.系統建議
      • 2.實時限制
      • 3.不支持的功能和缺失的功能
      • 4.顯示 OpenCV 對象
  • OpenCV 構建實例 (采用可視化操作的方式)
    • 1. 準備工作
    • 2. OpenCV構建


簡介

這些指南將幫助您學習如何使用 OpenCV 3.0、3.4 和 4.1 庫在內核模式下進行實時圖像處理。我們假設您基本上已經知道如何設置項目并打開驅動程序以開始您的工作。如果你對此不熟悉,你應該看看第一個項目 教程。

OpenCV 使用我們的實時 Windows 虛擬化。這種虛擬化在實時環境中模擬 Windows API 的最重要部分。只有在無法進行仿真或不合理的情況下,虛擬化才會離開實時環境并依賴于 Windows。此外,這種虛擬化是有限的,因此在實時使用OpenCV時存在一些限制。

需求和支持的環境

OpenCV 嚴重依賴標準的 C++ 庫。這意味著與 OpenCV 和 OpenCV 庫本身交互的代碼必須使用完全相同的 C/C++ 運行時庫 (CRT) 實例。Kithara不支持任何DLL版本的CRT用于內核模式。因此,要在 Kithara 中使用 OpenCV 庫,它們必須使用靜態鏈接運行時構建為靜態庫。不能使用 OpenCV 的 DLL 版本,因為這需要 OpenCV 使用 CRT 的 DLL 版本。此外,當將 CRT 的調試版本用于其中一個構建配置時,您還需要鏈接到靜態 OpenCV 庫的調試版本(它們的名稱后面附加了一個"d")。

Windows虛擬化僅適用于Kithara實時任務和作為DLL加載到內核模式的代碼。(Kithara還允許通過其他方式將代碼加載到內核模式并實時執行,但它們不適合運行OpenCV代碼)。對于Kithara RealTime Suite 10.11,我們已經使用以下Visual Studio平臺工具集(包括靜態CRT)成功測試了OpenCV 4.1:

  • Visual Studio 2017 (vc14.16) (Visual Studio 2017 版本 15.9.11,更新 9)

  • Visual Studio 2015 (vc14.00) (Visual Studio 2015 版本 14.0.25,更新 3)

我們還對 OpenCv 3.0 和 3.4 進行了等效測試:

  • Visual Studio 2017 (vc14.16) (Visual Studio 2017 版本 15.9.11,更新 9)

  • Visual Studio 2015 (vc14.00) (Visual Studio 2015 版本 14.0.25,更新 3)

  • Visual Studio 2013 (vc12.00) (Visual Studio 2013 版本 12.0.40,Update 5)

  • Visual Studio 2010 (vc10.00) (Visual Studio 2010 版本 10.0.30)

Kithara RealTime Suite 10.11之前的驅動程序(不包括在內)支持OpenCv 3.0,并在上述版本的Visual Studio 2013和2010中進行了測試。

這些測試是通過在實時環境中運行所有 OpenCV 3.0、3.4 和 4.1 準確性測試來執行的。OpenCV 是使用默認靜態庫構建。測試是使用源代碼中的 OpenCV 3.0、3.4 和 4.1 構建執行的,如下所述。請注意,OpenCv 4 使用了 C++11 標準功能,這些功能僅在 Visual Studio 2015 之后才得到充分實現。

構建 OpenCV 庫

OpenCV 附帶了用于不同版本的 Visual Studio(2015 和 2017)的庫構建,這些庫已經可以使用。但是,我們建議您使用將要用于自己的項目的編譯器重新構建 OpenCV 庫。這不僅減少了出現兼容性問題的機會,而且還讓您有機會從 OpenCV 構建中完全刪除一些不需要或不可用的功能。

OpenCV 依賴于工具"CMake"為不同的編譯器和 IDE 生成項目文件。請參閱 OpenCV 文檔,了解如何將 CMake 與 OpenCV 一起使用。CMake 允許您配置構建并禁用對第三方庫和 API 的特定依賴項。

使用 CMake 進行配置以與 Kithara 一起工作

最重要的配置步驟是將 BUILD_SHARED_LIBS 設置為禁用,因為它默認設置為"啟用"。此外,請確保已啟用 BUILD_WITH_STATIC_CRT。

我們還建議禁用有關 OpenCL、OpenGL、CUDA 和 Windows Media(DirectShow、VFW 等)的所有條目。這些 API 不能在內核模式下使用。如果您沒有禁用它們,OpenCV 將在運行時將缺少依賴項。但是,在這種情況下,OpenCV 應該仍然可以使用。

請使用 Windows 平臺的默認并行化框架(Microsoft 并發運行時,它包含在 CRT 中)。這意味著,WITH_OPENMP 和 WITH_TBB 都應該被禁用,這已經是默認設置。否則,這些框架的 DLL 將存在依賴性,這些 DLL 無法加載到內核模式,從而可能導致錯誤。

建議啟用 INSTALL_CREATE_DISTRIB,尤其是在處理我們的示例時。它將生成一個目標項目"INSTALL",在構建時,它將把庫和包含文件放在一個共享的根目錄下。然后,您應該創建一個指向該目錄的環境變量 OPENCV_DIR。我們的示例使用此環境變量,因此它們能夠找到要鏈接到的包含文件和庫。

這可以通過 CMakeGUI 或命令行完成,如下所示:

cmake -Bbuild
-DBUILD_SHARED_LIBS=false 
-DBUILD_WITH_STATIC_CRT=true 
-DWITH_OPENCL=false 
-DWITH_OPENGL=false 
-DWITH_DIRECTX=false 
-DWITH_VFW=false
-DWITH_CUDA=false 
-DWITH_MSMF=false 
-DWITH_IPP=true 
-DWITH_OPENCLAMDBLAS=false 
-DWITH_OPENCLAMDFFT=false 
-DBUILD_TESTS=false 
-DBUILD_PERF_TESTS=false 
-DBUILD_opencv_world=false 
-G "Visual Studio 15 2017" --arch x64 .\\sources\\

OpenCv 在從主要版本 3 過渡到 4 的過程中,已將其一些以前的核心模塊移動到 contrib 存儲庫中。這些是 shape、superres 和
videostab,它們與它們的構建依賴項 ximgproc 和 optflow 一起出現。4.1 也支持所有這些功能。要獲取這些內容,請參閱 他們的文檔。

使用 OpenCV 庫設置項目

除了設置內核模式DLL項目的默認方法外,您還需要將OpenCV構建的包含目錄添加到編譯器設置的包含目錄中,并將靜態庫的路徑以及要使用的庫添加到鏈接器設置中。包含文件將在" ( O P E N C V D I R ) / i n c l u d e " 下找到。庫路徑取決于使用的實際 C R T 和目標體系結構。通用路徑為 " (OPENCV_DIR)/include"下找到。庫路徑取決于使用的實際 CRT 和目標體系結構。通用路徑為" (OPENCVD?IR)/include"下找到。庫路徑取決于使用的實際CRT和目標體系結構。通用路徑為"(OPENCV_DIR)///staticlibs",其中是目標架構(x86 或 x64)和使用的 CRT 版本(vc10、vc11、vc12、vc14 或 vc15)。例如,在 Visual Studio 2013 中使用 64 位版本會導致其他鏈接器目錄為"$(OPENCV_DIR)/x64/vc12/staticlibs"。請注意,CRT 是以增量方式進行版本控制的,而不是像 Visual Studio 產品命名所建議的那樣按年份進行版本控制(即 Visual Studio 2013 使用 vc12,Visual Studio 2017 使用 vc15)。實際需要哪些庫取決于您正在使用的 OpenCV 部分。在下文中,列出了所需的可能庫。請將 XXX 替換為您想要的不帶點的 OpenCv 版本,例如 340 或 410。另請注意,Debug 版本將附加字母"d"):

  • opencv_calib3dXXX.lib

  • opencv_coreXXX.lib

  • opencv_features2dXXX.lib

  • opencv_flannXXX.lib

  • opencv_halXXX.lib

  • opencv_highguiXXX.lib

  • opencv_imgcodecsXXX.lib

  • opencv_imgprocXXX.lib

  • opencv_mlXXX.lib

  • opencv_objdetectXXX.lib

  • opencv_photoXXX.lib

  • opencv_shapeXXX.lib

  • opencv_stitchingXXX.lib

  • opencv_superresXXX.lib

  • opencv_videoXXX.lib

  • opencv_videoioXXX.lib

或者,也可以使用 opencv_worldXXX.lib,這是一個將所有其他庫捆綁到一個庫中的庫。

OpenCV 庫大多還依賴于第三方庫,這些庫隨 OpenCV 一起構建,并且與 OpenCV 構建同時構建。包括 IPP 庫、圖像編解碼器和壓縮(調試版本將附加字母"d"):

  • IlmImfd.lib

  • ippiwd.lib

  • ittnotifyd.lib

  • libjasperd.lib

  • libjpeg-turbod.lib

  • libpngd.lib

  • libprotobufd.lib

  • libtiffd.lib

  • libwebpd.lib

  • quircd.lib

  • zlibd.lib文件

某些代碼路徑還需要更多的 Windows 庫。它主要但不僅占模塊"highgui"。請注意,此列表不完整,并考慮推薦的設置。在 OpenCV 中包含對視頻格式的支持也會創建對其他庫的依賴性。

  • user32.lib

  • gdi32.lib

  • advapi32.lib

  • comctl32.lib

如果代碼未使用某些模塊,則這些列表可能會縮短。請參考 OpenCV 文檔來確定模塊的依賴關系。如果遇到來自鏈接器的有關缺少函數的錯誤消息,請首先檢查此列表以查找缺少的依賴項。

請不要忘記仍然鏈接到Kithara圖書館!如果您查看我們的示例,OpenCV 的項目配置是通過使用屬性表來解決的。這些設置將放入屬性表中,實際項目將繼承這些屬性表,并且在 Visual Studio UI 中可能不可見。這為配置階段提供了一些模塊化。

運行 OpenCV 代碼

使用Kithara RealTime Suite實時運行OpenCV代碼需要兩個主要步驟。首先,您需要將包含代碼的DLL加載到內核模式。其次,您將需要一個實際運行代碼的任務。

打開Kithara驅動程序后,可以立即加載DLL。必須使用專用函數 KS_loadVisionKernel,而不是通常的函數 KS_loadKernel。它將加載 DLL 并在適當的環境中執行其入口點。這是正確初始化 CRT 所必需的。

KSHandle hKernel;
KS_loadVisionKernel(&hKernel, "myDll.dll", 0, 0, KSF_KERNEL_EXEC);

下一步是創建一個任務,為此,我們首先需要在加載的DLL內部創建一個函數的回調,其中包含任務的代碼。

KSHandle hCallBack;
KS_createKernelCallBack(&hCallBack, hKernel, "myFunction", 0,KSF_DIRECT_EXEC |KSF_SAVE_FPU, 0);

DLL 中的函數在此處稱為"myFunction"。必須使用標志 KSF_DIRECT_EXEC,以便在觸發回調的同一上下文中運行回調。標志 KSF_SAVE_FPU 是必需的,用于在上下文切換上保存 FPU 和 SSE 寄存器的狀態。

關于結構包裝和對齊的重要通知
如果不使用默認結構打包,請確保包含具有相同結構打包效果的 OpenCV 標頭,就像用于構建 OpenCV 一樣(通常具有 8 個字節的默認打包)。OpenCV 頭文件不強制執行特定的結構打包。結構打包不匹配將導致二進制文件不兼容,從而在運行時導致各種錯誤。
一個例子是我們的樣本。它們使用與默認結構打包不同的結構打包,因此需要包含 OpenCV 標頭,并恢復默認結構打包。

在現在實際創建任務之前,我們還必須提高為其分配的堆棧空間。默認情況下,Windows 為每個線程保留 1 MB 的堆棧空間。Kithara 只保留 3 KB,這對于像 OpenCV 這樣的庫來說是不夠的。因此,我們將 KS_setTaskStackSize 的大小提高到 Windows 線程的典型大小。

KS_setTaskStackSize(0x100000, 0);

最后,我們創建任務。必須使用標志 KSF_CUSTOM_STACK_SIZE 創建任務,才能使用我們剛剛設置的更大的堆棧大小。

KSHandle hTask;
KS_createTask(&hTask, hCallBack, 250, KSF_CUSTOM_STACK_SIZE);

有關任務的更多信息,請參見 任務模塊。

請注意,只有實際調用 OpenCV 函數的函數才能作為任務執行。處理程序等的其他回調可以正常使用,并同時駐留在同一個 DLL 中。

圖像采集和 OpenCV

由于無法實時使用OpenCV附帶的圖像捕捉功能,因此必須使用相機模塊進行圖像采集。使用相機模塊中的函數 KS_recvCameraImage,您可以檢索指向圖像數據的指針以及有關寬度、高度、像素格式和行填充的信息。像素格式是 像素格式命名約定 (PFNC) 中定義的格式之一。有了這些信息,您可以使用 OpenCV 函數來創建 OpenCV 圖像 (cv::Mat),您可以進行處理。請注意,并非所有格式都適合轉換,例如幾種不同的包裝類型。如果沒有適合轉換的函數組合,則必須自行提供轉換函數。

cv::Mat 的構造函數非常靈活,因為它允許直接使用幾種不同的圖像格式而無需復制。此外,cv::cvtColorcv::mixChannels 可用于demosaic 、從不同的顏色空間轉換和重新排序通道,或合并來自不同圖像的通道。cv::Mat 構造函數的一個重要參數是參數"step",它描述了 to 行之間的字節計數。它取決于像素格式的單個像素的位大小和圖像的行填充。該步驟的計算方式如下:

step = 寬度 * bitSize / 8 + linePadding

如果行填充為零,則可以使用自動步驟。

以下是 PFNC 像素格式和匹配的 OpenCV 類型的映射:

PFNCOpenCV TypebitSizebits/Channel備注
Mono8CV_8UC188
Mono8sCV_8SC188
Mono10CV_16UC11610
Mono12CV_16UC11612
Mono14CV_16UC11614
Mono16CV_16UC11616
BayerGR8, BayerBG8, BayerRG8, BayerGB8CV_8UC1881)
BayerGR10, BayerBG10, BayerRG10, BayerGB10CV_16UC116101)
BayerGR12, BayerBG12, BayerRG12, BayerGB12CV_16UC116121)
BayerGR16, BayerBG16, BayerRG16, BayerGB16CV_16UC116161)
YUV8_UYV, YCbCr_8_CbYCr, YCbCr601_8_CbYCr, YCbCr709_8_CbYCrCV_8UC32482) 4)
RGB8, BGR8CV_8UC32482)
RGB10, BGR10CV_16UC348102)
RGB12, RGB12CV_16UC348122)
RGB16, RGB16CV_16UC348162)
RGBa8, BGRa8CV_8UC43282)
RGB565p, BGR565pCV_16UC1165, 63)
  1. 使用 cv::cvtColor demosaic 為 3 通道圖像。

  2. 使用 cv::cvtColor 轉換為不同的顏色空間和/或 cv::mixChannels 對組件進行重新排序。

  3. 使用 cv::cvtColor 轉換為 3 通道圖像。

  4. 對于 YUV 和相關類型,luma 通道始終是第二個通道,因此要轉換為更常見的格式,其中 luma 是第一個通道,您必須交換通道。

平面RGB格式(‘RGB8_Planar’、‘RGB10_Planar’、‘RGB12_Planar’、‘RGB16_Planar’)應被視為’單聲道’格式,創建三個圖像,然后可以將其組合成具有_cv::mixChannels_的多通道圖像。

自動并行化

我們的軟件支持 OpenCV 使用的 Microsoft 并發運行時。不支持其他并行化框架(如 OpenMP)。

自動并行化會在其他 CPU 上啟動其他任務,這可能會與您的實時應用程序設計沖突。如果沒有明確需要,我們建議通過調用 cv::setNumThreads(0) 來禁用自動并行化。

自動并行化任務從創建它們的任務繼承實時優先級。它們大多是在首次使用時或更新線程數時創建的。因此,顯式調用 cv::setNumThreads 以受控方式創建任務可能很有用。任務以循環方式分發到可用的 CPU,同時遵循 Windows 虛擬化中的進程關聯掩碼。Windows 函數 SetProcessAffinityMask、GetProcessAffinityMask 和 GetCurrentProcess 在實時上下文中可用,使你能夠控制允許啟動哪些 CPU 新任務。

限制和局限性

1.系統建議

由于所有分配都在非分頁池中,因此內核級別的內存資源受到限制,而非分頁池本身在 Windows 中是有限的資源。此問題對于 32 位 Windows XP 尤其適用,對于非分頁池,其最大大小為 256 MBytes。對于 64 位版本或高于 XP 的版本,這些限制設置得更高,如果您安裝了足夠的物理內存,則不會造成問題。另請注意,許多數據結構需要連續內存。這在 32 位平臺上可能很少見。

2.實時限制

某些 OpenCV 操作無法實時執行,因為它們需要與 Windows 系統交互。這些是文件處理和用戶交互(Windows、輸入)等功能。這些操作需要與用戶模式線程進行通信,但用戶模式線程的優先級很高,但當然無法滿足內核模式實時任務的實時約束。

3.不支持的功能和缺失的功能

以下功能不能在內核模式下使用:

  • 除 Microsoft 并發運行時以外的并行化框架

  • GPU 加速(OpenGL、OpenCL、CUDA、IPP Async、DirectX) 1)

  • 任何用于圖像捕獲和視頻解碼的第三方庫(DirectShow、VfW、FFMpeg、相機 API) 2)

  • OpenCV 模塊 HighGUI 3)

  1. 目前沒有計劃支持 GPU 加速。我們計劃支持將基于 CPU 的加速與 IPP 一起使用,包括 AVX 和 AVX2。

  2. 您可以使用我們的 相機模塊 從 GigE Vision? 和 USB 3 VisionTM 相機采集圖像。

  3. 對模塊"HighGUI"功能的基本子集只有基本的支持。我們不建議使用內核模式中的任何 GUI 元素(另請參閱下一段)。

4.顯示 OpenCV 對象

盡管您可以從內核級別使用簡單的 HighGUI 窗口,但不建議從內核級別打開窗口。顯示 OpenCV 對象的假定方法是使用共享內存區域將序列化的 OpenCV 項復制到其中,從而使用到用戶模式的進程間通信。

OpenCV 構建實例 (采用可視化操作的方式)

不想動手的話,也能獲取我們編譯好的資源: OpenCV - 4.1.0 靜態庫下載

1. 準備工作

  • 下載源碼:OpenCV官網 OpenCV - 4.1.0 下載
  • 安裝 Visual Studio 2017 (參考第一個項目中 Visual Studio 2022 C++ 開發環境安裝)

Visual Studio Community 2017 (version 15.7) (x86 and x64) - (Multiple Languages)
文件名: mu_visual_studio_community_2017_version_15.3_x86_x64_11100062.exe
SHA1: EC5E128EDC90FAC0BBADECD6DB32F8F008A4D669
文件大小: 1.02GB
發布時間 : 2017-08-14
方法: 復制ed2k鏈接,打開eMule或迅雷,新建下載,粘貼鏈接,開始下載

ed2k://|file|mu_visual_studio_community_2017_version_15.3_x86_x64_11100062.exe|1069960|5984B3CD547F9F213DE21EFE5887F08D|
  • 安裝CMake CMake下載 CMake 使用教程

2. OpenCV構建

  • 解壓OpenCV4.1.0的源碼后,打開源碼目錄創建 【build】 文件夾

  • 在這里插入圖片描述

  • 打開【cmake-gui.exe】開始構建項目,選擇源碼路徑,選擇構建目錄(使用創建的build目錄),點擊【Configure】
    在這里插入圖片描述

  • 選擇構建的版本(推薦 Visual Studio 2017) ,選擇構建平臺,點擊 【Finished】,等待配置完成
    在這里插入圖片描述

  • 根據上文中的一些說明進行配置
    配置選項:

選項操作
BUILD_SHARED_LIBSfalse
BUILD_WITH_STATIC_CRTtrue
WITH_OPENCLfalse
WITH_OPENGLfalse
WITH_DIRECTXfalse
WITH_CUDAfalse
WITH_MSMFfalse
WITH_IPPtrue
WITH_OPENCLAMDBLASfalse
WITH_OPENCLAMDFFTfalse
BUILD_TESTSfalse
BUILD_PERF_TESTSfalse
BUILD_opencv_worldfalse

在這里插入圖片描述
在這里插入圖片描述

  • 配置完成后點擊【Generate】生成Visual Studio 2017項目,等待執行完成
  • 在這里插入圖片描述
  • 執行成功后,點擊打開項目【Open Project】
  • 在這里插入圖片描述
    在這里插入圖片描述
  • 選擇構建版本,全部構建后,再點擊安裝,Release切換構建版本后同樣操作。
    在這里插入圖片描述在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 全部構建完成后,再【build】->【install】 目錄中就是已經編譯后的程序,你可以把他保存到你電腦的任意位置,以方便你在程序中調用;

  • 在這里插入圖片描述
    注意: 生成的庫 后綴中【d】結尾代表debug版本。
    在這里插入圖片描述
    現在,你可以嘗試運行一些Kithara執行OpenCV的一些示例了

          smp\LibraryOpenCVsmp\LibraryOpenCVDisplaysmp\LibraryOpenCVWithCamera
    

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

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

相關文章

【技術選型】FastDFS、OSS如何選擇

【技術選型】FastDFS、OSS如何選擇 開篇詞:干貨篇:FastDFS:OSS(如阿里云OSS): 總結篇:我是杰叔叔,一名滬漂的碼農,下期再會! 開篇詞: 文件存儲該選…

簡談設計模式之原型模式

原型模式是一種創建型設計模式, 用于創建對象, 而不必指定它們所屬的具體類. 它通過復制現有對象 (即原型) 來創建新對象. 原型模式適用于當創建新對象的過程代價較高或復雜時, 通過克隆現有對象來提高性能 原型模式結構 原型接口. 聲明一個克隆自身的接口具體原型. 實現克隆…

【鴻蒙學習筆記】屬性學習迭代筆記

這里寫目錄標題 TextImageColumnRow Text Entry Component struct PracExample {build() {Row() {Text(文本描述).fontSize(40)// 字體大小.fontWeight(FontWeight.Bold)// 加粗.fontColor(Color.Blue)// 字體顏色.backgroundColor(Color.Red)// 背景顏色.width(50%)// 組件寬…

展開說說:Android服務之實現AIDL跨應用通信

前面幾篇總結了Service的使用和源碼執行流程,這里再簡單分析一下如果需要Service跨進程通信該怎樣做。AIDL(Android Interface Definition Language)Android接口定義語言,用于實現 Android 兩個進程之間進行進程間通信&#xff08…

Clickhouse的聯合索引

Clickhouse 有了單獨的鍵索引,為什么還需要有聯合索引呢?了解過mysql的兄弟們應該都知道這個事。 對sql比較熟悉的兄弟們估計看見這個聯合索引心里大概有點數了,不過clickhouse的聯合索引相比mysql的又有些不一樣了,mysql 很遵循最…

深入解析Spring Boot的application.yml配置文件

目錄 引言Spring Boot配置文件簡介 application.yml的優點 基本結構與語法 YAML語法基礎Spring Boot中application.yml的基本結構 常見配置項詳解 服務器配置數據源配置日志配置其他常見配置 環境配置與Profile 多環境配置激活Profile 高級配置與技巧 屬性的占位符替換自定義配…

Spring源碼二十:Bean實例化流程三

上一篇Spring源碼十九:Bean實例化流程二中,我們主要討論了單例Bean創建對象的主要方法getSingleton了解到了他的核心流程無非是:通過一個簡單工廠的getObject方法來實例化bean,當然spring在實例化前后提供了擴展如:bef…

第5章-組合序列類型

#全部是重點知識,必須會。 了解序列和索引|的相關概念 掌握序列的相關操作 掌握列表的相關操作 掌握元組的相關操作 掌握字典的相關操作 掌握集合的相關操作1,序列和索引 1,序列是一個用于存儲多個值的連續空間,每一個值都對應一…

升級之道:精通Conda的自我升級藝術

升級之道:精通Conda的自我升級藝術 引言 Conda是Python和其他科學計算語言的強大包管理器,它不僅管理著包的安裝和依賴,還負責自身的更新。隨著開源社區的不斷發展,Conda定期發布新版本以修復已知問題、增加新功能和提高性能。本…

[面試愛問] https 的s是什么意思,有什么作用?

HTTPS 中的 "S" 代表 "Secure",即安全的意思。HTTPS(全稱是 HyperText Transfer Protocol Secure)是HTTP(HyperText Transfer Protocol)的安全版本,主要作用是為互聯網通信提供安全保護…

靈活多變的對象創建——工廠方法模式(Python實現)

1. 引言 大家好,又見面了!在上一篇文章中,我們聊了聊簡單工廠模式,今天,我們要進一步探討一種更加靈活的工廠設計模式——工廠方法模式。如果說簡單工廠模式是“萬能鑰匙”,那工廠方法模式就是“變形金剛”…

生成式人工智能:助攻開發者還是取代開發者?

引言 近年來,生成式人工智能(AIGC)在軟件開發領域掀起了一場革命,為開發者帶來了全新的工具和可能性。從代碼生成、錯誤檢測到自動化測試,AI正在以各種方式改變著開發者的工作方式。然而,這也引發了人們對開…

Python采集京東標題,店鋪,銷量,價格,SKU,評論,圖片

京東的許多數據是通過 JavaScript 動態加載的,包括銷量、價格、評論和評論時間等信息。我們無法僅通過傳統的靜態網頁爬取方法獲取到這些數據。需要使用到如 Selenium 或 Pyppeteer 等能夠模擬瀏覽器行為的工具。 另外,京東的評論系統是獨立的一個系統&a…

offer題目33:判斷是否是二叉搜索樹的后序遍歷序列

題目描述:輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷結果。如果是則返回true,否則返回false。假設輸入的數組的任意兩個數字都互不相同。例如,輸入數組{5,7,6,9,11,10,8},則返回true,,因為這個整數是下圖二叉搜索樹…

c++內存管理(上)

目錄 引入 分析 說明 C語言中動態內存管理方式 C內存管理方式 new/delete操作內置類型 new和delete操作自定義類型 引入 我們先來看下面的一段代碼和相關問題 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1…

集訓day3:并查集

一、目錄 1.并查集模版 2.并查集的理解和應用 二、正文 1.并查集模版 P3367 【模板】并查集 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 2.并查集的理解與應用 (1).并查集與聯通塊數量 P1197 [JSOI2008] 星球大戰 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) P1656 炸…

數圖助推朝陽佳惠遼寧華聯開啟數字化導航、精細化管理新紀元!

近期,遼寧省著名零售企業朝陽佳惠與遼寧華聯,秉持創新精神,大膽嘗試,在品類空間管理方面推出了創新舉措。引入了先進的數圖可視化陳列管理系統,通過智能化、直觀化的方式優化商品布局。此舉不僅大幅提高了商品管理的效…

去除各種軟件彈窗教程

清羽彈窗 在mutil/OnlineDialog/onPostExecute前 添加return-void Arm彈窗 第一步,提取安裝包 第二步,搜索代碼Ljava/io/DataOutputStream;->flush()V 第三步,往上看找到 .registers 10 在下面加return-void 云注入彈窗 第一種方法:dex搜…

Sql 導入到 Excel 工具

Sql 導入到 Excel 工具 這個VBA宏的步驟如下: 通過文件對話框選擇SQL文件。讀取文件內容。解析文件中的每一行,如果包含“insert into”,則提取表名。檢查是否已經存在以表名命名的工作表,如果不存在則創建新的工作表。將數據插…

element-ui封裝分頁組件:實現首頁、上一頁、下一頁、末頁、跳轉按鈕

首頁、上一頁、下一頁、末頁、跳轉按鈕 因為el-pagination只有一個插槽,所以通過兩個el-pagination插槽分別加入首頁、末頁按鈕,再拼接這兩個el-pagination的方式來實現首頁、末頁按鈕跳轉按鈕不用加事件,如果el-pagination修改了前往的頁數…