opencv 3.x是否有一个可用的C接口?
我曾试图在Wondows 10 PC上使用MinGW/Eclipse在普通C程序中使用opencv 3.4。opencv的编译和安装按照说明进行,但当我在Eclipse项目设置中只包含libs、header等时,我得到了一个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
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;
}