深入探討OpenCV版本

OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實現許多應用程序的快速開發。OpenCV庫主要用C++,Python和Java編寫,支持的操作系統包括Windows、Linux、Mac OS X、Android和iOS。

一、OpenCV版本的歷史

該庫的發展歷程自2000年,已經經歷了多次版本迭代。下面我們一起來看看OpenCV歷史版本的一些發展和更新:

1. OpenCV 1.0

OpenCV 1.0是第一個開放版本的OpenCV庫,它包含了計算機視覺演算法和核心組件。它提供了透視,非透視相機校準和點線興趣區域等功能。然而,這個版本在不同平台之間通信方面的兼容性很差。

2. OpenCV 2.0

OpenCV 2.0是迄今為止最受歡迎和最廣泛使用的版本。在這個版本中,添加了很多新的特性和演算法,比如SIFT描述符,以及支持64位系統的編譯器和庫。

3. OpenCV 3.0

OpenCV 3.0中增加了全新的模塊和改進演算法,比如13種新的深度學習演算法和加速晶元的支持等。此外,該版本引入了更加優化的函數和支持C++11的新API。

4. OpenCV 4.0

在OpenCV 4.0版本中,加入了對深度學習和人工智慧的支持,包括支持TensorFlow、Caffe和ONNX等工具庫。此外,該版本還增加了基於SSE4.1、AVX2和NEON的加速功能,為移動設備提供更快的計算速度。

二、OpenCV版本的安裝

下面我們來看看OpenCV的安裝過程。這裡我們以OpenCV 4.5.1版本為例:

1. 安裝依賴項

在Ubuntu上,首先需要安裝依賴項:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential cmake git unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev

2. 下載OpenCV

在下載前,先決定自己的安裝路徑,例如此處設置為/usr/local:

cd ~
mkdir opencv_build
cd opencv_build
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip
unzip opencv.zip
unzip opencv_contrib.zip
mv opencv-4.5.1 opencv
mv opencv_contrib-4.5.1 opencv_contrib

3. 編譯和安裝

開始編譯和安裝之前,我們需要使用cmake來進行配置:

cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D OPENCV_GENERATE_PKGCONFIG=YES \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D BUILD_SHARED_LIBS=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_PERF_TESTS=OFF \
    -D BUILD_TESTS=OFF \
    -D WITH_FFMPEG=ON \
    -D WITH_GTK=ON \
    -D WITH_LIBV4L=ON \
    -D WITH_V4L=ON \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_opencv_python3=ON \
    -D PYTHON3_EXECUTABLE=/usr/bin/python3 \
    -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include ..

完成以上配置後,運行以下命令進行編譯和安裝:

make -j4
sudo make install
sudo ldconfig

三、OpenCV的使用

下面我們通過一個簡單的例子,來介紹一下OpenCV的使用方法。

1. 利用OpenCV進行圖像處理

首先,我們需要導入OpenCV庫,使用以下代碼:

#include <opencv2/opencv.hpp>
using namespace cv;

現在可以打開一張圖片,並顯示在窗口中。使用以下代碼:

int main() {
  Mat img = imread("image.jpg");
  namedWindow("image", WINDOW_AUTOSIZE);
  imshow("image", img);
  waitKey(0);
  return 0;
}

現在可以使用一些函數,比如Canny函數進行邊緣檢測。使用以下代碼:

int main() {
  Mat img = imread("image.jpg", IMREAD_GRAYSCALE);
  Mat edges;
  Canny(img, edges, 50, 100);
  namedWindow("edges", WINDOW_AUTOSIZE);
  imshow("edges", edges);
  waitKey(0);
  return 0;
}

2. 利用OpenCV進行視頻處理

同樣,我們需要先進行OpenCV庫的導入。使用以下代碼:

#include <opencv2/opencv.hpp>
using namespace cv;

現在可以從攝像頭中捕獲視頻,並將視頻顯示在窗口中。使用以下代碼:

int main() {
  VideoCapture cap(0);
  if (!cap.isOpened()) {
    return -1;
  }
  
  Mat frame;
  namedWindow("video", WINDOW_AUTOSIZE);
  while(true) {
    cap >> frame; 
    imshow("video", frame);
    if (waitKey(30) >= 0) break;
  }
  return 0;
}

如果要對視頻進行處理,可以添加相關的代碼,比如使用Canny函數進行邊緣檢測。使用以下代碼:

int main() {
  VideoCapture cap(0);
  if (!cap.isOpened()) {
    return -1;
  }
  
  Mat frame;
  namedWindow("video", WINDOW_AUTOSIZE);
  while(true) {
    cap >> frame;
    Mat edges;
    Canny(frame, edges, 50, 100);
    imshow("video", edges);
    if (waitKey(30) >= 0) break;
  }
  return 0;
}

3. 利用OpenCV進行人臉識別

OpenCV還支持人臉識別功能,可以通過Haar級聯分類器進行實現。使用以下代碼:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
  CascadeClassifier face_cascade;
  if (!face_cascade.load("haarcascade_frontalface_default.xml")) {
    return -1;
  }
  
  VideoCapture cap(0);
  if (!cap.isOpened()) {
    return -1;
  }
  
  Mat frame;
  namedWindow("video", WINDOW_AUTOSIZE);
  while (true) {
    cap >> frame;
    Mat gray;
    cvtColor(frame, gray, COLOR_BGR2GRAY);
    equalizeHist(gray, gray);

    std::vector<Rect> faces;
    face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30));

    for (size_t i = 0; i < faces.size(); i++) {
      Point center;
      int radius;
      center.x = cvRound((faces[i].x + faces[i].width*0.5));
      center.y = cvRound((faces[i].y + faces[i].height*0.5));
      radius = cvRound((faces[i].width + faces[i].height)*0.25);
      circle(frame, center, radius, Scalar(0, 255, 0), 4, 8, 0);
    }
    
    imshow("video", frame);
    if (waitKey(30) >= 0) break;
  }
  
  return 0;
}

四、OpenCV版本的未來發展

OpenCV版本的未來發展需要擺脫當前的限制,並擴大它的應用範圍。未來的OpenCV應當更全面地支持深度學習、自然語言處理、語音識別等多領域的應用。除了繼續優化計算機視覺演算法和圖像處理技術,並加強多種演算法的兼容性,還需要進一步加強對教育和應用領域的支持和推廣,讓更多人能夠用OpenCV來構建自己的應用程序。

原創文章,作者:GBIZB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/373178.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GBIZB的頭像GBIZB
上一篇 2025-04-25 15:26
下一篇 2025-04-25 15:26

相關推薦

  • 如何在PyCharm中安裝OpenCV?

    本文將從以下幾個方面詳細介紹如何在PyCharm中安裝OpenCV。 一、安裝Python 在安裝OpenCV之前,請確保已經安裝了Python。 如果您還沒有安裝Python,可…

    編程 2025-04-29
  • Git secbit:一種新型的安全Git版本

    Git secbit是一種新型的安全Git版本,它在保持Git原有功能的同時,針對Git存在的安全漏洞做出了很大的改進。下面我們將從多個方面對Git secbit做詳細地闡述。 一…

    編程 2025-04-29
  • Python OpenCV 直線檢測

    本文將介紹在Python OpenCV中進行直線檢測的方法,主要涉及到圖像的邊緣檢測、霍夫變換和繪製直線等操作。 一、邊緣檢測 由於直線檢測是從圖像的邊緣開始的,因此必須先找到圖像…

    編程 2025-04-29
  • 如何將Java項目分成Modules並使用Git進行版本控制

    本文將向您展示如何將Java項目分成模塊,並使用Git對它們進行版本控制。分割Java項目可以使其更容易維護和拓展。Git版本控制還可以讓您跟蹤項目的發展並協作開發。 一、為什麼要…

    編程 2025-04-28
  • Python的版本演變

    Python是一門非常流行的編程語言,它有著簡潔、易讀、易寫的特點。自1991年由Guido van Rossum發明以來,Python已經發展成為一個成熟的編程語言,擁有多個版本…

    編程 2025-04-28
  • librosa版本用法介紹

    librosa是一個用於音頻信號處理的python庫,具有多種處理音頻的功能。在librosa庫中,版本號非常重要,在不同的版本中可能會存在一些差異。本文將圍繞librosa的版本…

    編程 2025-04-28
  • Java多版本支持實現方式

    本文將從以下幾個方面闡述如何實現Java多版本支持,並給出可行的代碼示例。 一、多版本Java環境概述 Java是一門跨平台的編程語言,但是在不同的應用場景下,可能需要使用不同版本…

    編程 2025-04-27
  • Opencv 實現讀取 BMP 圖片

    Opencv 是一個基於 C/C++ 語言的開源計算機視覺庫,可以用於圖像處理、特徵識別、目標跟蹤、機器學習等領域。在圖像處理中,讀取 BMP 圖片是常見操作之一。 一、打開 BM…

    編程 2025-04-27
  • Taro3.5.11版本微信小程序端v-html依然無法解析video為中心的問題解決方案

    該問題的解決是通過使用 Taro3.5.11 版本自定義組件進行處理,具體解決方案如下: 一、自定義組件 首先,我們需要創建一個自定義組件 VideoComponent,該組件的主…

    編程 2025-04-27
  • 利用SeaweedFS版本進行大規模文件存儲與分配

    SeaweedFS是一個基於Go語言開發的分散式文件系統,它是一種高可用、高擴展性、高效率的解決方案。通過利用SeaweedFS版本,我們可以方便地實現大規模文件的存儲與分配。 一…

    編程 2025-04-27

發表回復

登錄後才能評論