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-hk/n/373178.html