opencvopencv入门


备注

本节概述了opencv是什么,以及开发人员可能想要使用它的原因。

它还应该提到opencv中的任何大型主题,并链接到相关主题。由于opencv的文档是新的,您可能需要创建这些相关主题的初始版本。

版本

OpenCV 3

发布日期
3.2 2016年12月23日
3.1 2015年12月18日
3.0 采用WordPress
3.0 RC1 2015年4月23日
3.0 beta 2014年11月7日
3.0 alpha 2014年8月21日

OpenCV 2

发布日期
2.4.13 2016年5月19日
2.4.12 二零一五年七月三十零日
2.4.11 2015年2月25日
2.4.10 2014-10-01
2.4.9 2014年4月14日
2.3.1 2011-08-17
2.3.0 2011-07-04
2.2.0 2010-12-05
2.1.0 2010-04-06
2.0.0 2009-10-01
1.0.0 2006-10-19

从源代码构建和安装OpenCV

这是从源代码在基于Debian的Linux系统上安装OpenCV 3的分步指南。对于其他发行版,这些步骤应该保持不变,只需在为构建安装包时替换相关的包管理器命令。

注意:如果您不想浪费时间构建或不喜欢终端,您很可能从Synaptic包管理器GUI安装OpenCV。但是,这些库经常过时。

准备构建

在终端中发出以下命令以安装所需的软件包:

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config \
                     libavcodec-dev libavformat-dev libswscale-dev
 

以下包是可选的:

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev \
                     libpng-devlibtiff-dev libjasper-dev libdc1394-22-dev
 

发出以下命令以获取OpenCV源代码并准备构建:

mkdir ~/src
cd ~/src
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build && cd build
 

构建和安装

我们在构建中包含了这些示例,但请随意将它们排除在外。也可以随意设置其他标志并根据需要自定义构建。

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D INSTALL_C_EXAMPLES=ON ..
 

如果CMake未报告任何错误或缺少库,请继续构建。

make -j$(nproc)
 

如果没有产生错误,我们可以继续安装OpenCV到系统:

sudo make install
 

现在OpenCV应该可供您的系统使用。您可以使用以下行来了解OpenCV的安装位置以及安装的库:

pkg-config --cflags opencv  # get the include path (-I)
pkg-config --libs opencv    # get the libraries path (-L) and the libraries (-l)
 

测试安装

我们首先构建C ++示例:

cd ~/src/opencv/samples
cmake .
make
 

如果没有产生错误,请运行任何样本,例如

./cpp/cpp-example-edge
 

如果示例运行,则正确安装C ++库。

接下来,测试Python绑定:

python
>> import cv2
>> print cv2.__version__
 

如果这些命令导入OpenCV并打印正确的版本而不抱怨,则正确安装Python绑定。

恭喜,您刚刚构建并安装了OpenCV。编程愉快!

对于Mac,请在此处参考Mac OS X上的OpenCV安装

从网络摄像头获取图像

使用OpenCV的VideoCapture类,使用Java,C / C ++和Python,显示从网络摄像头拍摄的实时视频。

Java的

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.videoio.VideoCapture;
 
public class Camera {
    public static void main(String[] args) {
        // Load Native Library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        // image container object
        Mat imageArray = new Mat();
        // Video device acces
        VideoCapture videoDevice = new VideoCapture();
        // 0:Start default video device 1,2 etc video device id
        videoDevice.open(0);
        // is contected
        if (videoDevice.isOpened()) {
        // Get frame from camera
            videoDevice.read(imageArray);
            // image array
            System.out.println(imageArray.toString());
            // Release video device
            videoDevice.release();
        } else {
            System.out.println("Error.");
        }
    }
}
 

C ++

#include "opencv2/opencv.hpp"
#include "iostream"

int main(int, char**) {
    // open the first webcam plugged in the computer
    cv::VideoCapture camera(0);
    if (!camera.isOpened()) {
        std::cerr << "ERROR: Could not open camera" << std::endl;
        return 1;
    }

    // create a window to display the images from the webcam
    cv::namedWindow("Webcam", CV_WINDOW_AUTOSIZE);

    // this will contain the image from the webcam
    cv::Mat frame;
        
    // capture the next frame from the webcam
    camera >> frame;
    
    // display the frame until you press a key
    while (1) {
        // show the image on the window
        cv::imshow("Webcam", frame);
        // wait (10ms) for a key to be pressed
        if (cv::waitKey(10) >= 0)
            break;
    }
    return 0;
}
 

蟒蛇

import numpy as np
import cv2

# Video source - can be camera index number given by 'ls /dev/video*
# or can be a video file, e.g. '~/Video.avi'
cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
 

Windows上的OpenCV 3.1入门

我们在Windows上安装OpenCV 3.1.0并开始使用。有两种方法可以在Windows上安装OpenCV。一种是下载安装程序并运行它。其他是从源头构建。

这是安装OpenCV并开始使用的最简单方法。 OpenCV在这里提供了在Windows上安装的预构建二进制文件。下载完成后,将其解压缩并安装在所选路径中。

ProTip:确保您的OpenCV路径不包含任何空格。因此,最好将它安装在C:\或D:\ root目录中

上述方法的问题是您无法使用opencv_contrib模块。此外,它没有附带所有第三方工具和库。所以,如果你想使用所有这些,请跟随。

我将解释从源代码安装OpenCV的最低要求。有关更高级的信息,请参阅此处

  • 安装CMake
  • 在某些没有空格的目录中从https://github.com/Itseez/opencv.git克隆OpenCV源代码。让我们将其称为“OpenCVdir”。 在此处输入图像描述
  • 现在,打开CMake GUI并将源目录(OpenCVdir)添加到Sources菜单,并将目录构建到构建菜单。 提示:如果没有构建目录,请在opencv文件夹中创建一个。 在此处输入图像描述
  • 单击Configure并选择Visual Studio编译器版本。我有32位Visual Studio 2013 Professional,所以我选择了Visual Studio 12编译器。 在此处输入图像描述

提示:您可以从此处下载Visual Studio 2013 Professional。登录后,它提供30天试用+ 90天延长试验。

  • 按Finish,CMake将自动加载所有包。您可以添加或删除包。再次按Configure。
  • 如果要使用额外的opencv_contrib模块进行构建,则需要从此处下载它们。然后,提取它们并将opencv_contrib / modules目录添加到CMake,如下所示。 在此处输入图像描述
  • 现在再次按Configure,然后按Generate。
  • 关闭CMake。转到your_opencv \ build文件夹并打开名为“OpenCV.sln”的文件。 - 它将打开Visual Studio。现在,在两个Debug中运行它在此处输入图像描述模式和发布在此处输入图像描述模式。
  • 现在,在Visual Studio右上角的解决方案资源管理器中,选择INSTALL项目并构建它。 在此处输入图像描述

欢呼!!享受您的OpenCV。

将OpenCV include目录添加到Environment Variables的PATH变量:

  • 转到“系统属性”,然后单击“高级系统设置”。 在此处输入图像描述

  • 现在,单击环境变量>>路径>>编辑。 在此处输入图像描述

  • 在这里,将位于OpenCVdir / build / install / x86 / vc ** / bin中的bin文件夹添加到此变量中。注意不要替换现有的Path值。

  • 在此之后,您需要重新启动系统以更改环境变量,现在您已准备就绪。

Java中的Hello世界示例

从Java中的文件系统读取OpenCv映像

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
 
public class Giris {    
    public static void main(String[] args) {
        //Load native library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        //image container object
        Mat imageArray;
        //Read image from file system
        imageArray=Imgcodecs.imread("C:\\Users\\mesutpiskin\\sample.jpg");
        //Get image with & height
        System.out.println(imageArray.rows());
        System.out.println(imageArray.cols());
    }
}
 

使用OpenCV加载并显示图像

在这个例子中,我们将看到如何从磁盘加载彩色图像并使用OpenCV的内置函数显示它。我们可以使用C / C ++,Python或Java绑定来完成此任务。

在C ++中:

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>

using namespace cv;

int main(int argc, char** argv) {
    // We'll start by loading an image from the drive
    Mat image = imread("image.jpg", CV_LOAD_IMAGE_COLOR);

    // We check that our image has been correctly loaded
    if(image.empty()) {
        std::cout << "Error: the image has been incorrectly loaded." << std::endl;
        return 0;
    }

    // Then we create a window to display our image
    namedWindow("My first OpenCV window");

    // Finally, we display our image and ask the program to wait for a key to be pressed
    imshow("My first OpenCV window", image);
    waitKey(0);

    return 0;
}
 

在Python中:

import sys
import cv2

# We load the image from disk
img = cv2.imread("image.jpg", cv2.CV_LOAD_IMAGE_COLOR)

# We check that our image has been correctly loaded
if img.size == 0
    sys.exit("Error: the image has not been correctly loaded.")

# We create a window to display our image
cv2.namedwindow("My first OpenCV window")

# We display our image and ask the program to wait until a key is pressed
cv2.imshow("My first OpenCV window", img)
cv2.waitKey(0)

# We close the window
cv2.destroyAllWindows()
 

在Java中:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.highgui.Highgui;
public class Sample{
public static void main (String[] args) {

    //Load native opencv library
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    //Read image from file first param:file location ,second param:color space
    Mat img = imread("image.jpg",CV_LOAD_IMAGE_COLOR);

    //If the image is successfully read.
    if (img.size() == 0) {
        System.exit(1);
    }
}
 

HighGui在opencv java中没有namedwindows或imshow等价物。使用swing或swt显示图像。

什么和为什么OPENCV?

OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库。它是为各种目的而构建的,例如机器学习,计算机视觉,算法,数学运算,视频捕获,图像处理等。多年来,它在研究人员和开发人员中非常受欢迎,因为它支持不同的平台(Windows,Linux) ,android,ios)。它还有各种着名编程语言的包装器。根据许可协议,企业可以访问和修改代码。

该库包含超过2500种优化算法,具有出色的性能和速度精度。这些算法可用于检测和识别面部,识别物体,对视频中的人体动作进行分类,跟踪相机移动,跟踪移动物体,提取物体的3D模型,从立体相机生成3D点云,将图像拼接在一起以产生高分辨率整个场景的图像,从图像数据库中找到类似的图像,从使用闪光灯拍摄的图像中移除红眼,跟踪眼睛运动,识别风景并建立标记以用增强现实覆盖它等等.OpenCV具有很棒的人和社区作为用户参与,开发人员和研究人员,数量超过4.7万,估计下载量超过700万。该图书馆广泛应用于专业公司,研究团体和其他团体。

许多知名公司,如谷歌,雅虎,微软,英特尔,IBM,索尼,本田,丰田等都使用该库,有许多创业公司,如Applied Minds,VideoSurf和Zeitera,它们广泛使用OpenCV。 OpenCV的部署用途涵盖了将街景图像拼接在一起,检测以色列监控视频中的入侵,监控中国矿山设备,帮助机器人在Willow Garage中导航和拾取物体,检测欧洲游泳池溺水事故,运行互动艺术西班牙和纽约,在土耳其检查跑道上的残骸,检查世界各地工厂的产品标签,以便在日本进行快速面部检测。它具有C ++,C,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS。 OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令。目前正在积极开发功能齐全的CUDA和OpenCL接口。有超过500种算法和大约10倍的组成或支持这些算法的函数。 OpenCV本身是用C ++编写的,它有一个模板化的接口,可以与STL容器无缝协作。

官方网站收集的信息