日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 图像刺绣算法_图像处理:OpenCV3源代码文件解析

發布時間:2024/10/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 图像刺绣算法_图像处理:OpenCV3源代码文件解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

結合岡薩雷斯的《數字圖像處理》和Opencv3.0,學習圖像處理算法有一段時間了,知道了函數怎么使用,但不知道opencv所用的函數源代碼是如何編寫的,“知其然,也要知其所以然”,閑暇之日,研究下源代碼的編寫,縱然不能全部看懂或者掌握,有收獲就是好的。

有詩為證,詩曰:

圖像處理有本質,二維數組是內涵。

卷積頻域來濾波,輪廓分割形態學。

書山有路勤為徑,興趣使然來做舟。

為識廬山真面目,學習源碼實踐多。

源代碼位置

假如你將opencv3.0解壓到D:opencv3.0,那么路徑為:

D:opencv3.0opencvsources

文件夾modules和samples是我們重點學習的內容。

圖 1 源代碼和范例存放位置

圖1 文件夾存放內容如下。

  • 3rdparty: 包含第三方庫,如用視頻解碼用的 ffmpeg、jpg、png、tiff 等圖片的解碼庫。
  • apps: 包含進行 Haar 分類器訓練的工具,OpenCV 進行人臉檢測便是基于 Haar 分類器。如果你想檢測人臉以外的圖片,千萬不要錯過這幾個工具。
  • cmake: 包含生成工程項目時cmake 的依賴文件,只能用于搜索第三方庫,普通開發者不需要關心這個文件夾的內容。
  • data: 包含 OpenCV 庫及范例中用到的資源文件
  • doc: 包含生成文檔所需的源文件及輔助腳本
  • include: 包含入口頭文件。OpenCV子文件夾中是C語言風格的API。OpenCV 2 子文件夾中只有一個 opencv.hpp 文件,這是 OpenCV 2 及 OpenCV 3 推薦使用的頭文件
  • modules:算法模塊的源代碼。研究算法的同學 學習的重點!!!
  • platforms: 包含交叉編譯所需的工具鏈及額外的代碼,交叉編譯指的是在一個操作系統中編譯供另一個系統使用的文件。
  • samples:算法用法示例文件夾

重點文件夾:modules和samples。

modules文件夾

modules文件夾存放了如下內容,主要分為CPU模塊和CUDA模塊。

圖2 modules文件夾展開

  • CPU模塊
  • ? alib3d: 相機標定及三維重建。相機標定用于取出相機自身缺陷導致的畫面形變,還原真實的場景,確保計算的準確性。三維重建通常用在雙目視覺(立體視覺),即兩個標定后的攝像頭觀察同一個場景,通過計算兩幅畫面中的相關性來估計像素深度。

    ? core: 核心功能模塊,定義了基本的數據結構,包括最重要的 Mat 類、XML 讀寫、OpenGL三維渲染等。這個模塊應該在入門之后學習。

    ? features2d: 包含 2D 特征值檢測的框架。包含各種特征值檢測器及描述子,如 FAST、MSER、OBRB、BRISK 等。各類特征值擁有統一的算法接口,因此在不影響程序邏輯的情況下可以替換替換。

    ? flann: 用于在多維空間內聚類及搜索的近似算法,做圖像檢索的開發者對它不會陌生。

    ? highgui: 高級圖形界面,包括用戶界面、Qt。

    ? imgcodecs:對圖像文件編解碼、讀寫操作

    ? imgproc: 全稱為 Image Processing,即圖像處理,包括圖像濾波、集合圖像變換、直方圖計算、形狀描述子等。圖像處理是計算機視覺的重要工具,重點學習。

    ? ml: 全稱為 Machine Learning,即機器學習。包括統計模型、K 最近鄰、支持向量機、決策樹、神經網絡等經典的機器學習算法。

    ? objdetect:物體檢測模塊,包括 Haar 分類器、SVM 檢測器及文字檢測。

    ? photo: 計算攝影學,包括圖像修補、去噪、HDR 成像、非真實感渲染等。如果讀者想實PS的高級功能,那么這個模塊必不可少。

    ? shape: 形狀匹配算法模塊,用于描述形狀、比較形狀。

    ? stitching: 圖像拼接,可用于制作全景圖。

    ? superres: 全稱為 Super Resolution,用于增強圖像的分辨率。

    ? video: 視頻分析模塊,包括背景提取、光流跟蹤、卡爾曼濾波等,做視頻監控的開發者會經常使用這個模塊。

    ? videoio:視頻編解碼、讀寫操作

    ? videostab: 全稱為Video Stabilization,用于解決相機移動拍攝時視頻不夠穩定的問題。

    ? viz: 三維可視化模塊。可以認為這個模塊實現了一個簡單的三維可視化引擎,有各種 UI 空間和鍵盤、鼠標交互方式。底層實現基于 CTK 這個第三方庫。

    2.CUDA模塊

    ? cuda: CUDA- 加速的計算機視覺算法,包括數據結構 cuda::GpuMat、基于 cuda 的相機標定及三維重建等。

    ? cudaarithm: CUDA- 加速的矩陣運算模塊。

    ? cudabgsegm: CUDA- 加速的背景分割模塊,通常用于視頻監控。

    ? cudacodec: CUDA- 加速的視頻編碼與解碼。

    ? cudafeatures2d: CUDA- 加速的特征檢測與描述模塊,與 features2d/ 模塊功能類似。

    ? cudafilters: CUDA- 加速的圖像濾波。

    ? cudaimgproc: CUDA- 加速的圖像處理算法,包含直方圖計算、霍夫變換等。

    ? cudaoptflow: CUDA- 加速的光流檢測算法。

    ? cudastereo: CUDA- 加速的立體視覺匹配算法。

    ? cudawarping: 實現 CUDA- 加速的快速圖像變換,包括透視變換、旋轉、改變尺寸等。

    samples文件夾

    android: Android 平臺的范例。既有完全是 Java 的工程,也有完全是 C++ 的工程,也有更為常見的 Java 與 C++ 共存的工程。

    ? cpp: 由于 OpenCV 是一款 C++ 庫,因此 C++ 的返利是最多的,后面將重點介紹。

    ? data: 示例程序要用到的數據

    ? directx: directx (d3d) 是微軟的私有三維圖像 API,這個文件夾中的范例覆蓋了 d3d9、d3d10、d3d11.

    ? gpu: 利用 cuda 加速的范例。

    ? java: OpenCV 3 官方支持 Java 語言綁定,因此這里演示如何使用 Java 版本的 OpenCV。

    ? python: OpenCV 3 官方支持 Python 語言綁定,因此這里演示使用 Python 2 版本的范例。

    ? tapi: tapi 是OpenCV 3 的一個新特性,使用 cv::UMat 替代cv::Mat,實現 CPU 和 GPU 的運算使用統一的接口,不再需要顯式地在 CPU 和 GPU 之間傳遞數據,方便開發人員。

    ? winrt: Windows RT 平臺的范例,開發語言是微軟的 C++ “方言”.

    .cpp文件功能匯總(壓軸戲登場)

    以sample文件夾為例

    ?tutorial_code/: opencv教程代碼

    ? 3calibration.cpp: 同時標定三臺水平放置的相機。

    ? bagofwords_classification.cpp: 使用圖像檢測實現簡易的圖像搜索功能。

    ? bgfg_gmg.cpp: 演示GMG 背景檢測算法的使用方式。

    ? bgfg_segm.cpp: 演示高斯混合背景檢測算法的使用方式。

    ? brief_match_test.cpp: 使用 BRIEF 特征值來匹配兩張圖像。

    ? build3dmodel.cpp: 演示如何使用基礎矩陣和特征值來創建三維模型。

    ? calibration.cpp: 完整的多用途標定程序。

    ? calibration_artificial.cpp: 在程序中生成一個虛擬的相機,并進行標定。

    ? camshiftdemo.cpp: 讀取實時的攝像頭數據,并演示基于均值偏移算法的視頻跟蹤。

    ? chamfer.cpp: 使用Chamfer 算法匹配兩副邊緣圖像。

    ? cloning_demo.cpp: 命令行模式的圖像克隆。

    ? cloning_gui.cpp: 圖形界面交互的圖像克隆。

    ? connected_components.cpp: 查找并繪制圖像中的連通區域。

    ? contours2.cpp: 查找并繪制圖像中的輪廓。

    ? convexhull.cpp: 查找并繪制由點的集合組成的凸包。

    ? cout_mat.cpp: 使用cout 來輸出各種格式化的 Mat 對象。

    ? create_mask.cpp: 演示如何創建黑白掩碼圖像。

    ? dbt_face_detection.cpp: 基于檢測的人臉跟蹤代碼。

    ? delaunay2.cpp: 通過鼠標交互式地生成 Delaunay 三角形。

    ? demhist.cpp: 演示直方圖的用法。

    ? descriptor_extractor_matcher.cpp: 演示 features2d 檢測框架的用法。

    ? detection_based_tracker_sample.cpp: 與 dbt_face_detection.cpp 類似。

    ? detector_descriptor_evaluation.cpp: 評估各種特征檢測器和描述子。

    ?detector_descriptor_matcher_evaluation.cpp:評估各種特征檢測器和匹配器。

    ? dft.cpp: 演示一幅圖像的離散傅里葉變換。

    ? distrans.cpp: 顯示邊緣圖像的距離變換值。

    ? drawing.cpp: 演示繪畫和文字顯示功能。

    ? edge.cpp: 演示Canny 邊緣檢測。

    ? em.cpp: 對隨機生成的數據點進行 EM 聚類。

    ? fabmap_sample.cpp: 演示 FAB-MAP 圖像檢索算法。

    ? facerec_demo.cpp: 人臉識別。

    ? fback.cpp: 實時的Farneback 光流跟蹤。

    ? ffilldemo.cpp: 演示 floodFill() 像素填充算法。

    ? filestorage.cpp: 演示序列化到外部文件,如yml、xml等。

    ? fitellipse.cpp: 將輪廓點匹配到橢圓。

    ? freak_demo.cpp: 演示 FREAK 特征值的用法。

    ? gencolors.cpp: 演示 generateColors()。

    ? generic_descriptor_match.cpp: 基于 SURF 的兩幅圖像間的匹配。

    ? grabcut.cpp: 演示GrabCut 分割算法。

    ? houghcircles.cpp: 用霍夫算法檢測圓。

    ? houghlines.cpp: 用霍夫算法檢測直線。

    ? hybridtrackingsample.cpp: 混合跟蹤算法(Hybrid Tracker)的演示。

    ? image.cpp: 來回轉換cv::Mat 和 IplImage。

    ? image_alignment.cpp: 演示 findTransformECC() 函數。

    ? image_sequence.cpp: 使用 VideoCapture 對象讀取序列幀。

    ? imagelist_creator.cpp: 創建圖像列表到 xml 文件。

    ? inpaint.cpp: 使用鼠標交互地進行圖像修補。

    ? intelperc_capture.cpp: Intel 感知計算設備相關的函數。

    ? kalman.cpp: 使用卡爾曼濾波進行二維跟蹤。

    ? kmeans.cpp: Kmeans 聚類算法的演示。

    ? laplace.cpp: 拉普拉斯邊緣檢測。

    ? latentsvm_multidetect.cpp: latentSVM 檢測器。

    ? letter_recog.cpp: 字母識別。

    ? linemod.cpp: 基于OpenNI 的體感設備應用。

    ? lkdemo.cpp: 演示Lukas-Kanade光流法。

    ? logpolar_bsm.cpp: 演示 LogPolar 盲點模型。

    ? lsd_lines.cpp: LSD 線段檢測。

    ? matcher_simple.cpp: SURF 特征檢測。

    ? matching_to_many_images.cpp: 一對多的特征檢測。

    ? meanshift_segmentation.cpp: 演示基于均值漂移的色彩分割函數——meanShiftSegmentation()

    ? minarea.cpp: 尋找最小包圍盒、包圍圓

    ? morphology2.cpp: 形態學圖像處理

    ? npr_demo.cpp: 演示各種非真實感渲染效果

    ? opencv_version.cpp: 輸出 OpenCV 庫的版本號

    ? openni_capture.cpp: 演示 OpenNI 相關的體感設備

    ? pca.cpp: 基于 PCA 的人臉識別

    ? peopledetect.cpp: 基于 cascade 或 hog 進行物體(人)檢測

    ? phase_corr.cpp: 演示 phaseCorrelate() 函數

    ? points_classifier.cpp: 演示各種機器學習算法

    ? segment_objects.cpp: 實時地在視頻或相機畫面中檢測前景物體

    ? select3dobj.cpp:在一個有標定棋盤的桌子上,使用3D Box標記一個對象,在所有序列幀中,只要照相機可以看到棋盤,就可以跟蹤對象,并用Box分割對象

    ? shape_example.cpp: 比較并檢索形狀

    ? shape_transformation.cpp: 用 SURF 特征值檢測形狀并進行變換

    ? squares.cpp: 檢測圖像中的方塊形狀。

    ? starter_imagelist.cpp: 加載一個ImageList(由imagelist_creator.cpp產生)

    ? stereo_calib.cpp: 雙目視覺的標定

    ? stereo_match.cpp: 計算左右視覺的圖像的差異,生成點云文件。

    ? stitching.cpp: 演示圖像拼接算法。

    ? stitching_detailed.cpp: 演示更多參數的圖像拼接算法。

    ? train_HOG.cpp: 訓練 HOG 分類器

    ? tree_engine.cpp: 演示如何使用不同的決策樹和森林包括Boosting和隨機樹

    ? videostab.cpp: 演示 videostab 中各個參數的用法。

    ? watershed.cpp: 演示著名的分水嶺圖像分割算法。

    結語

    編程本就是一個練習加總結的過程,不善于總結的編程人員不是一個好工程師。

    研讀源代碼,既可以學習專家們的編程技巧(借以對C++再次學習),然后結合對函數的調用,理解是不是更深刻一點?

    總結

    以上是生活随笔為你收集整理的java 图像刺绣算法_图像处理:OpenCV3源代码文件解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。