Opencv 函数只能以 C 代码方式调用,不能以 C++ 方式调用

2024-04-15

我对 Opencv 真的很陌生。按照说明下载并安装 Opencv 2.4 后,我开始编写我的第一个 Opencv 程序,这基本上是网络上教程的副本。

#include <stdio.h>
#include <iostream>
#include <vector>

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

int main( int argc, char** argv )
{
    char* filename = "C:\\Research\abc.pgm";  
     IplImage *img0;

    if( (img0 = cvLoadImage(filename,-1)) == 0 )
        return 0;

    cvNamedWindow( "image", 0 );
    cvShowImage( "image", img0 );
    cvWaitKey(0);  
    cvDestroyWindow("image");
    cvReleaseImage(&img0);



    return 0;
}

这些代码运行得很好,但您可能会注意到,在上面的代码中调用 Opencv 函数是采用 C 代码方式。因此,我决定继续使用 C++ 代码方式,代码如下:

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

using namespace cv;
using namespace std; 

int main( int argc, char** argv )
{ 
    if( argc != 2) 
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

    if(! image.data )                              // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", image );                   // Show our image inside it.

    waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
}

然而,在这种情况下,程序有几个链接错误,尽管编译看起来不错。我收到的链接错误如下:

Error   2   error LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class stlp_std::basic_string<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> > const &,int)" (?namedWindow@cv@@YAXABV?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@H@Z) referenced in function _main    C:\Research\OpencvTest\OpencvTest.obj
Error   1   error LNK2019: unresolved external symbol "void __cdecl cv::imshow(class stlp_std::basic_string<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@ABV_InputArray@1@@Z) referenced in function _main    C:\Research\OpencvTest\OpencvTest.obj

我非常确定我在我的程序中添加了必要的Opencv库(我使用VC10),我添加的附加库如下:

stl_port.lib
opencv_highgui242d.lib
opencv_core242d.lib

我想知道我的设置有什么问题。为什么它适用于第一个程序但不适用于第二个程序?任何想法将不胜感激。谢谢!


这与混合 STLPort 和 MSVC STL 有关。您可能没有自己构建 OpenCV 库,因此它们使用 VC10 STL。使用 C 接口,只需char*但对于 C++ 接口链接器会混淆std::string在方法中。您应该看到相同的结果imread如果你将它的输入投射到string too.

我可以在我的项目中混合 STL 实现吗? http://stlport.sourceforge.net/FAQ.shtml#libmix2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opencv 函数只能以 C 代码方式调用,不能以 C++ 方式调用 的相关文章

随机推荐

  • Django Haystack 对同一模型的多个字段进行索引

    我正在尝试使用以下命令将 elasticsearch 嵌入到我的 Django 应用程序中django haystack 我正在尝试实现用户搜索 我的用户模型是这样的 class MyUser AbstractBaseUser userna
  • Android:如何将 DatePicker 视图日期格式从 MM/dd/yyyy 更改为 dd/MM/yyyy?

    我很长一段时间以来一直试图找到这个问题的答案 我还查看了以下链接 Android DatePicker 小工具格式 https stackoverflow com questions 4499433 android datepicker w
  • GitHub上的origin和upstream有什么区别?

    有什么区别origin and upstream on GitHub http en wikipedia org wiki GitHub When a git branch a命令执行后 它显示的某些分支的前缀为origin remotes
  • 使用 F# 3.0 进行动态 SQL 查询?

    我尝试过使用 FLINQ 但它对于 F 3 0 beta 来说已经过时了 有人可以指导我如何在 F 中创建动态 SQL 查询吗 我们最近开发了一个库 FSharpComposableQuery 旨在支持 F 3 0 及以上版本中更灵活的查询
  • 为什么“sed -n -i”会删除现有文件内容?

    运行 Fedora 25 服务器版本 sed version给我sed GNU sed 4 2 2以及通常的版权和联系信息 我创建了一个文本文件sudo vi potential sed bug Vi 显示该文件的内容 带有 set lis
  • 将 A 框架与 Three.js 相结合

    我想知道 是否可以将 Three js 元素添加到 A 框架场景中 假设 A frame 是基于 Three js 构建的 并且 three Version 0 74 0 登录到你的控制台这不应该是一件奇怪的事情 对吧 我在我的 A 框架场
  • WPF 中的颜色过渡

    我想要进行颜色过渡BackgroundWPF 窗口的颜色 我怎样才能做到这一点 例如 Brush i color Brushes Red this is the initial color Brush f color Brushes Blu
  • cmake 在 OS X 上找不到 gl.h

    我在 OS X 10 10 上并尝试使用 GLUT 和 OpenGL 构建一个 C 项目 我将其简化为展示我的问题的最小示例 我有以下内容CMakeLists txt cmake minimum required VERSION 2 8 F
  • delphi读取xml元素

    我是 XML 新手 我们需要使用新的进行地理编码必应空间数据 API http msdn microsoft com en us library gg585131 aspx 我已经设法以 xml 格式从他们那里得到结果 我将如何阅读响应中的
  • rake db:test:prepare 中的 Rails 待迁移

    我已经跑了rake db migrate我所有的迁移都运行了 然而 当我尝试跑步时rake db test prepare我收到错误 You have 1 pending migrations 20130724211328 CreateGa
  • Extjs 4(下面有3.4的代码)下载从post请求返回的文件

    我看到了与此略有相关的问题 但没有一个能回答我的问题 我设置了 Ext Ajax request 如下 var paramsStringVar param1 1 param2 two param3 something param4 etc
  • 为什么接口 IOrderedEnumerable 在 T 中不是协变的?

    我正在查看 IOrderedEnumerable 的声明 令我惊讶的是它的 TElement 类型参数不是协变的 public interface IOrderedEnumerable
  • Java 输入问题 - 如何比较字符串[重复]

    这个问题在这里已经有答案了 这看起来很简单 但我已经被困在这里几个小时了 我有一个疑问 当你必须在Java中比较两个字符串时 如果我只是做这样的事情 String var1 hello String var2 hello 然后在另一个函数中
  • SwiftUI:ScrollView 拖动底部工作表

    我正在尝试创建一个 SwiftUI Scrollview 来拖动其容器 如下所示 https drive google com file d 1O92DgsVI1OjM1HEUXUwVywB8gcdShOP view usp sharing
  • PromQL if then 语句等效

    我有一个执行计数的简单 PromQL 查询 sum up container name my container environment name env 这是 Grafana 仪表板的一部分 允许从下拉菜单中选择 env 我想根据环境执行
  • SQL Server 分区查询

    当我运行查询时 select 100 50 它给我 2 很好 但是当我运行查询时 select 50 100 我原以为它会给我 0 5 但它却给了我 0 为什么 我怎样才能得到0 5 select 25 30 100 我预计它会给我 83
  • 获取Webbrowser Control中URL的原始源代码

    我有一个嵌入在 C Windows 应用程序中的浏览器控件 我想获取 url 包含的原始 HTML 不是渲染的 HTML 它可能已被 javascript 修改 与在 IE 中查看源代码中的内容相同 有什么建议么 WebBrowser Do
  • Python:使用 %x(区域设置)格式化的日期与预期不符

    我有一个日期时间对象 我想根据操作系统区域设置 例如在 Windows 7 区域和语言设置中指定 为其创建日期字符串 遵循Python的日期时间格式化文档 http docs python org library datetime html
  • Chrome Webview 中的 Service Worker 支持

    Android 版 chrome webview 是否支持 Service Worker 如果是 则支持哪个版本 尝试谷歌搜索 但没有找到正确的信息 As per 本公告 https chromereleases googleblog co
  • Opencv 函数只能以 C 代码方式调用,不能以 C++ 方式调用

    我对 Opencv 真的很陌生 按照说明下载并安装 Opencv 2 4 后 我开始编写我的第一个 Opencv 程序 这基本上是网络上教程的副本 include