如果您想使用多维数组(如 numpy)进行图像处理或神经网络,您可以使用 OpenCV cv::Mat 以及大量的图像处理算法。如果您只想将其仅用于矩阵运算,则只需编译相应的 opencv 模块以减小大小并拥有很小的 OpenCV 库。
cv::Mat(Matrix) 是一个 n 维数组,可用于存储各种类型的数据,例如 RGB、HSV 或灰度图像、具有实数或复数值的向量、其他矩阵等。
一个 Mat 包含以下信息:width, height, type, channels, data, flags, datastart, dataend 等等。
它有几种矩阵操作方法。您可以在 CUDA 内核以及 cv::cuda::GpuMat 上创建奖励。
考虑我想创建一个 10 行 20 列的矩阵,输入 CV_32FC3:
int R = 10, C = 20;
Mat m1;
m1.create(R, C, CV_32FC3); //creates empty matrix
Mat m2(cv::Size(R, C), CV_32FC3); // creates a matrix with R rows, C columns with data type T where R and C are integers,
Mat m3(R, C, CV_32FC3); // same as m2
奖金:
编译 tiny and compact opencv 库仅用于矩阵运算。其中一种方法就像本文中提到的那样。
或
使用以下 cmake 命令编译 opencv 源代码:
$ git clone https://github.com/opencv/opencv.git
$ cd opencv
$ git checkout <version you want to checkout>
$ mkdir build
$ cd build
$ cmake -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_ANDROID_EXAMPLES=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DANDROID_STL=c++_shared -DBUILD_SHARED_LIBS=ON -D BUILD_opencv_objdetect=OFF -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D BUILD_opencv_features2d=OFF -D BUILD_opencv_flann=OFF -D BUILD_opencv_highgui=OFF -D BUILD_opencv_ml=OFF -D BUILD_opencv_photo=OFF -D BUILD_opencv_python=OFF -D BUILD_opencv_shape=OFF -D BUILD_opencv_stitching=OFF -D BUILD_opencv_superres=OFF -D BUILD_opencv_ts=OFF -D BUILD_opencv_videostab=OFF -D BUILD_opencv_dnn=OFF -D BUILD_opencv_imgproc=OFF ..
$ make -j $nproc
$ sudo make install
试试这个例子:
#include "opencv2/core.hpp"
#include<iostream>
int main()
{
std::cout << "OpenCV Version " << CV_VERSION << std::endl;
int R = 2, C = 4;
cv::Mat m1;
m1.create(R, C, CV_32FC1); //creates empty matrix
std::cout << "My Mat : \n" << m1 << std::endl;
}
使用以下命令编译代码:
$ g++ -std=c++11 opencv_mat.cc -o opencv_mat `pkg-config --libs opencv` `pkg-config --cflags opencv`
运行可执行文件:
$ ./opencv_mat
OpenCV Version 3.4.2
My Mat :
[0, 0, 0, 0;
0, 0, 0, 0]