OpenCV链接错误 - Win32和VS2012

3

我已经构建了OpenCV 3.0.0的alpha和beta版本。但每次运行项目时,只有针对“imread”函数,我会收到以下错误:

error LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z) referenced in function _main    ...

这是我的代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdlib.h> 
#include <stdio.h>
using namespace cv;

int main()
{
    Mat a=Mat::zeros(10,10,0);
    Mat b;
    b=imread("Mu.jpg");
    imshow("s",a);
    waitKey(1000);

}

当我删除“imread”函数时,它可以正常工作。没有错误地构建和运行,并显示来自“A”矩阵的小黑色图像。 我已经从头开始重建了解决方案和OpenCV,但仍然出现此错误。

我正在使用VS2012,并为项目添加了包含和库路径的属性表。 有人能帮忙吗?


1
imread在3.0版本中从highgui移动到imgcodecs,因此需要使用不同的头文件/库。 - berak
非常感谢!!问题已经解决了!! 不过有点奇怪,因为imread的签名也在highgui头文件中,所以只需要更改库文件,我猜这可能算作一个bug... - RRostami
因为imread的签名也在highgui头文件中,我猜这更有助于过渡。 - berak
2个回答

3

imread函数已被移动到imgcodecs库中,因此您需要将其包含:

对于MSVC用户:在“配置属性-链接器-输入-附加依赖项”中添加“opencv_imgcodecs300d.lib”,并在文件中包含“#include <opencv2/imgcodecs/imgcodecs.hpp>”。

对于Qt用户:对于Qt IDE用户,请在.pro文件中添加-lopencv_imgcodecs300d-lopencv_imgcodecs300, 并在主文件中包含#include <opencv2/imgcodecs/imgcodecs.hpp>

注意:库名称中的数字300应更改为匹配所使用的OpenCV版本号。


0

这个未解决的外部符号链接器错误基本上是由于编译器无法获取已声明函数的定义而引起的。

因此,请确保您已经在代码中定义了imread("Mu.jpg"){},然后尝试编译相同的代码。

检查您是否正确链接了库,如果您正在使用opencv2.2,则link可能会有所帮助。


假设正确链接,imread() 应该是 opencv2 库的一部分,因此不应该出现错误。这不是用户应该“定义”的事情。 - WhozCraig
我怎样才能确定它被正确地链接了?"imshow"被链接并执行不够吗? - RRostami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接