opencv-Mat补充

opencv2.4.3所给代码如下:

/*  For description look into the help() function. */

#include "opencv2/core/core.hpp"
#include <iostream>
//#include <opencv2/core/core.hpp>
//#include <opencv2/highgui/highgui.hpp>
//#include <cv.h>
//#include <iostream>

using namespace std;
using namespace cv;

void help()
{
    cout
    << "\n--------------------------------------------------------------------------" << endl
    << "This program shows how to create matrices(cv::Mat) in OpenCV and its serial"
    << " out capabilities"                                                            << endl
    << "That is, cv::Mat M(...); M.create and cout << M. "                            << endl
    << "Shows how output can be formated to OpenCV, python, numpy, csv and C styles." << endl
    << "Usage:"                                                                       << endl
    << "./cvout_sample"                                                               << endl
    << "--------------------------------------------------------------------------"   << endl
    << endl;
}

int main(int,char**)
{
    help();
    // create by using the constructor
    Mat M(2,2, CV_8UC3, Scalar(0,0,255));
    cout << "M = " << endl << " " << M << endl << endl;

    // create by using the create function()
    M.create(4,4, CV_8UC(2));
    cout << "M = "<< endl << " "  << M << endl << endl;

    // create multidimensional matrices
    int sz[3] = {2,2,2};
    Mat L(3,sz, CV_8UC(1), Scalar::all(0));
    // Cannot print via operator <<

    // Create using MATLAB style eye, ones or zero matrix
    Mat E = Mat::eye(4, 4, CV_64F);
    cout << "E = " << endl << " " << E << endl << endl;

    Mat O = Mat::ones(2, 2, CV_32F);
    cout << "O = " << endl << " " << O << endl << endl;

    Mat Z = Mat::zeros(3,3, CV_8UC1);
    cout << "Z = " << endl << " " << Z << endl << endl;

    // create a 3x3 double-precision identity matrix
    Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    cout << "C = " << endl << " " << C << endl << endl;

    Mat RowClone = C.row(1).clone();
    cout << "RowClone = " << endl << " " << RowClone << endl << endl;

    // Fill a matrix with random values
    Mat R = Mat(3, 2, CV_8UC3);
    randu(R, Scalar::all(0), Scalar::all(255));

    // Demonstrate the output formating options
    cout << "R (default) = " << endl <<        R           << endl << endl;
    cout << "R (python)  = " << endl << format(R,"python") << endl << endl;
    cout << "R (numpy)   = " << endl << format(R,"numpy" ) << endl << endl;
    cout << "R (csv)     = " << endl << format(R,"csv"   ) << endl << endl;
    cout << "R (c)       = " << endl << format(R,"C"     ) << endl << endl;

    Point2f P(5, 1);
    cout << "Point (2D) = " << P << endl << endl;

    Point3f P3f(2, 6, 7);
    cout << "Point (3D) = " << P3f << endl << endl;


    vector<float> v;
    v.push_back( (float)CV_PI);   v.push_back(2);    v.push_back(3.01f);

    cout << "Vector of floats via Mat = " << Mat(v) << endl << endl;

    vector<Point2f> vPoints(20);
    for (size_t E = 0; E < vPoints.size(); ++E)
        vPoints[E] = Point2f((float)(E * 5), (float)(E % 7));

    cout << "A vector of 2D Points = " << vPoints << endl << endl;
    return 0;
}


g++ -std=c++11 -I/usr/local/include -I/home/tian/ofcs/src/SeetaFace6OpenBinary-main/CPU/SeetaFace/index/build/include -I/home/tian/opencv-4.1.0/include -I/home/tian/opencv-4.1.0/build -I/home/tian/opencv-4.1.0/modules/core/include -I/home/tian/opencv-4.1.0/modules/calib3d/include -I/home/tian/opencv-4.1.0/modules/features2d/include -I/home/tian/opencv-4.1.0/modules/flann/include -I/home/tian/opencv-4.1.0/modules/dnn/include -I/home/tian/opencv-4.1.0/modules/objdetect/include -I/home/tian/opencv-4.1.0/modules/stitching/include -I/home/tian/opencv-4.1.0/modules/ml/include -I/home/tian/opencv-4.1.0/modules/imgproc/include -I/home/tian/opencv-4.1.0/modules/photo/include -I/home/tian/opencv-4.1.0/modules/video/include -I/home/tian/opencv-4.1.0/modules/videoio/include -I/home/tian/opencv-4.1.0/modules/imgcodecs/include -I/home/tian/opencv-4.1.0/modules/highgui/include -o test test.o -L/usr/local/lib -L/home/tian/ofcs/src/SeetaFace6OpenBinary-main/CPU/SeetaFace/index/build/lib64 -L/home/tian/ofcs/src/SeetaFace6OpenBinary-main/CPU/SeetaFace/index/build/lib -lSeetaFaceDetector600 -lSeetaFaceLandmarker600 -lSeetaFaceRecognizer610 -lopencv_world test.o: In function `test1()': test.cpp:(.text+0x76f): undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' test.cpp:(.text+0xa3d): undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)' test.cpp:(.text+0xaf7): undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' test.cpp:(.text+0xd85): undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)' /home/tian/ofcs/src/SeetaFace6OpenBinary-main/CPU/SeetaFace/index/build/lib64/libtennis.so: undefined reference to `exp@GLIBC_2.29' /home/tian/ofcs/src/SeetaFace6O
最新发布
03-22
### 配置和使用 OpenCV Contrib 模块 要在 Visual Studio 2022 中配置并使用 OpenCV Contrib 模块,可以按照以下方法实现: #### 下载 OpenCVOpenCV Contrib 首先需要下载 OpenCV 的源码以及对应的 OpenCV Contrib 源码。可以从官方 GitHub 仓库获取最新版本的代码[^1]。 - **OpenCV**: https://github.com/opencv/opencv/releases - **OpenCV Contrib**: https://github.com/opencv/opencv_contrib/releases 确保两者版本一致(例如 OpenCV 4.5.5 和 OpenCV Contrib 4.5.5),以便兼容性得到保障[^3]。 --- #### 使用 CMake 构建 OpenCV 并启用 Contrib 模块 构建 OpenCV 是一个重要的步骤,尤其是当需要支持额外功能时。以下是具体的操作流程: 1. 打开 CMake GUI 工具,设置路径如下: - `Where is the source code`: 设置为 OpenCV 源码根目录。 - `Where to build the binaries`: 设置为目标构建文件夹(建议新建一个文件夹用于存储生成的结果)。 2. 在 CMake 参数列表中查找以下选项,并进行相应调整: - 启用 `BUILD_opencv_world` 来打包所有模块到单个库文件中[^5]。 - 将 `OPENCV_EXTRA_MODULES_PATH` 设置为 OpenCV Contrib 的 `modules` 文件夹路径。这一步非常重要,因为它指定了 contrib 模块的位置[^2]。 3. 点击 `Configure` 进行初步配置,随后点击 `Generate` 创建解决方案文件。 --- #### 编译生成 OpenCV 库 打开由 CMake 生成的 `.sln` 解决方案文件,在 Visual Studio 2022 中选择 Release 或 Debug 模式进行编译。成功后会生成所需的动态链接库(DLL)、静态库(LIB)以及其他资源文件[^4]。 --- #### 配置 Visual Studio 项目以支持 OpenCV Contrib 在实际开发过程中,还需要对目标项目进行必要的配置才能正常使用 OpenCV 及其 contrib 模块的功能。 1. **设置包含目录** 在项目的属性页中导航至 `C/C++ -> General -> Additional Include Directories`,添加 OpenCV 的头文件路径,例如: ```plaintext D:\OPencv4.5.5\opencv\build\include ``` 2. **指定库目录** 转到 `Linker -> General -> Additional Library Directories`,填入库所在位置,比如: ```plaintext D:\OPencv4.5.5\opencv\build\x64\vc15\lib ``` 3. **定义附加依赖项** 前往 `Linker -> Input -> Additional Dependencies`,加入所需的具体库名,如: ```plaintext opencv_world455d.lib opencv_aruco455d.lib // 如果启用了 aruco 模块 opencv_sfm455d.lib // 若 sfm 功能被激活 ``` 注意:如果选择了 contrib 模块,则可能涉及更多扩展库名称,请依据实际情况补充完整。 4. **调试模式下的 DLL 加载** 确认运行程序的工作目录能够访问到对应架构的 DLL 文件(通常位于 `\bin` 子文件夹下)。可以通过复制这些共享对象到输出目录或者更新系统的 PATH 环境变量来解决加载失败的问题。 --- #### 测试验证 编写一段简单的测试代码确认环境搭建无误: ```cpp #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> int main() { cv::Mat image = cv::imread("test.jpg"); if (image.empty()) { std::cout << "Error loading image!" << std::endl; return -1; } cv::imshow("Test Image", image); cv::waitKey(0); return 0; } ``` 上述例子展示了基本读取图片与显示窗口的能力;如果有任何错误提示则需回溯检查前面各环节是否存在遗漏之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Digital2Slave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值