Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
opencv 3.x是否有一个可用的C接口?_C_Eclipse_Opencv - Fatal编程技术网

opencv 3.x是否有一个可用的C接口?

opencv 3.x是否有一个可用的C接口?,c,eclipse,opencv,C,Eclipse,Opencv,我曾试图在Wondows 10 PC上使用MinGW/Eclipse在普通C程序中使用opencv 3.4。opencv的编译和安装按照说明进行,但当我在Eclipse项目设置中只包含libs、header等时,我得到了一个 C:/opencv/MinGW\u build/install/include/opencv2/imgproc/imgproc\u C.h:1041:未定义对cvRound的引用(之前有许多警告) 我的编译命令是 gcc“-IC:\\opencv\\MinGW\u buil

我曾试图在Wondows 10 PC上使用MinGW/Eclipse在普通C程序中使用opencv 3.4。opencv的编译和安装按照说明进行,但当我在Eclipse项目设置中只包含libs、header等时,我得到了一个

C:/opencv/MinGW\u build/install/include/opencv2/imgproc/imgproc\u C.h:1041:未定义对cvRound的引用
(之前有许多警告)

我的编译命令是
gcc“-IC:\\opencv\\MinGW\u build\\install\\include”“-IC:\\opencv\\MinGW\u build\\install\\include\\opencv\\MinGW\u build\\install\\include\\opencv”-O0-g3-Wall-c-fmessage length=0-o“src\\opencv\u c\u testproject.o”“..\\src\\opencv\u c\u testproject.c”

我使用了来自的示例代码

在浏览了几篇文章之后,问题可能是opencv 3中对C的支持下降了?还是我把配置搞砸了

一个简单的C++项目,使用我的Buff.< 非常感谢您的帮助。

cvRound()问题是这方面的首要问题之一

还有更多。Plain.C文件与安装附带的3.x core_C.h include有问题。它使用cv_def.h,它似乎有#定义,允许它使用“namespace”关键字,这在您的C文件中是错误的

一些讨论OpenCV的Github成员建议对这些问题进行修复,但OpenCV项目贡献者坚持认为纯C API在3.x版之前的某个地方已经停止使用了

所以。。有三种选择:

  • 在3.x版之前返回OpenCV

  • 使用OpenCV 3.x和旧的2.4头文件。我在3.0.0中使用过它。。但这是有风险的

  • 或者。。杀了你的宝贝。。对于任何其他配置,使用C++和.CPP扩展。最近我用VS2017在C++ 64位中用OpenCV 3.4测试了C-StultLPIIMAGE。运行良好,请参见下文。你不必重写东西。只需嵌入C代码,或声明为C++静态函数即可。Mat和lpIImage接口均可用:

,

//CVMain3.cpp
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
静态IplImage*CVGreyImageFromFile(常量字符*文件名)
{
IplImage*img=cvLoadImage(文件名,CV\u LOAD\u IMAGE\u灰度);
返回img;
}
int mainTest()
{   
string filename=“c:/test/mytestimage.jpg”;
IplImage*im1=CVGreyImageFromFile(filename.c_str());
如果(im1!=NULL)
{
cvShowImage(“显示lpIImage的窗口”,im1);
Mat AK=cv::cvarrToMat(im1,false,true,0,0);
imshow(“橱窗展示垫”,AK);
cvReleaseImage(&im1);
}

C++中C++ C++(C++ 11或更新版)中的其他CUT在大范围内被使用。旧的C API可能被删除。一些新的模块也不提供。在使用OpenCV 3。x时,你应该选择官方支持C++ API。或者无限编译失败的消息可能会出现。网站“有C++,C,Python和java接口”是很奇怪的。在头版…不同的版本有不同的API(大多数是相同的)。
 //CVMain3.cpp
 #include <stdio.h>
 #include <iostream>
 #include <string>
 #include <opencv2/core.hpp>
 #include <opencv2/imgproc.hpp>
 #include <opencv2/highgui.hpp>

 using namespace cv;
 using namespace std;

 static IplImage *CVGreyImageFromFile(const char *FileName)
 {
    IplImage *img = cvLoadImage(FileName, CV_LOAD_IMAGE_GRAYSCALE);
    return img;
 }

 int mainTest()
 {   
    string filename = "c:/test/mytestimage.jpg";
    IplImage *im1 = CVGreyImageFromFile(filename.c_str());
    if (im1 != NULL)
    {
        cvShowImage("window showing lpIImage", im1);
        Mat AK = cv::cvarrToMat(im1, false, true, 0, 0);
        imshow("window showing Mat", AK);
        cvReleaseImage(&im1);
    }
    else cout << "No CVGreyImageFromFile.";
    cv::waitKey(10000);
    getchar();    
    return 0;
}