我编写了一个简单的 C++ 代码来读取网络摄像头图像并显示它。但是,当我编译时,出现错误 - '对 cv::Mat::Mat() 的未定义引用'。我不知道为什么它显示两个垫子。这是我的代码:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include <stdlib.h>
int main() {
cv::VideoCapture cap(0);
if (!cap.isOpened){
std::cout << "Error opening camera" << std::endl;
}
cv::Mat img;
while(1){
cap >> img;
cv::imshow("output", img);
cv::waitKey(1);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我编译它的方式
g++ example.cpp `pkg-config --libs opencv4`
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会出现错误。任何帮助表示赞赏!
这适用于我的 Linux:
g++ main.cpp -I/usr/include/opencv4/ -lopencv_core -lopencv_videoio -lopencv_highgui
Run Code Online (Sandbox Code Playgroud)
虽然这不是可移植的(使用cmake可以解决问题,但您需要先学习 cmake),但我将提示您如何自己发现这一点。
每当您看到类似的错误时,请转到https://docs.opencv.org/Undefined reference to cv::Mat::Mat()上的文档,选择最新版本(此处:https: //docs.opencv.org/4.5.5/),然后在“搜索”窗口中,链接器找不到的类/函数的名称(此处:),读取定义它的标头(此处:),然后缺少的库将具有名称或. 找到您机器中的任何一个(例如 inside )并链接它,省略扩展名和名称开头。就我而言,库位置(具有完整路径)是,因此我将其链接到。然后需要用同样的方法找到剩下的lib。Mat#include<opencv2/core/mat.hpp>libopencv_core.*libopencv_mat.*/user/liblib/usr/lib/libopencv_core.so-lopencv_core
了解如何自动化此操作,例如通过Makefile或CMakeLists.txt只是一个简单的 bash 脚本。