openCV 2.4.3/Xcode 4.5.2/mac osx 10.8.2
我想让openCV与iOS一起工作.我试图使用openCV.org中的预构建的2.4.3框架.但是我得到以下xcode项目构建错误,表明编译器不知道它正在处理c ++,例如
#include <list> !'list' file not found
namespace cv !unknown type name 'namespace'
Run Code Online (Sandbox Code Playgroud)
这似乎只涉及以下头文件:
"opencv2/nonfree/features2d.hpp"
"opencv2/nonfree/nonfree.hpp"
"opencv2/video/video.hpp"
如果我不在opencv.hpp(或其他任何地方)中包含这三个文件,我似乎能够编译并使用openCV ok.问题是,我确实需要非自由文件,因为我正在试验SURF - 最近已经转移到非自由.
这真是一个双重问题(对不起;-)
更新
我克隆了openCV git存储库,并从中构建了一个新的框架.这种方法以前没有用,但今天我意识到我没有使用当前版本的CMAKE.我一直在使用CMAKE 2.8.2,这将无法为ios构建opencv.当前版本的CMAKE 2.8.10构建它没有任何问题(这是一个服从文档的对象课程,确实需要CMAKE min.v2.8.8).
现在,当我在Xcode项目中添加opencv框架的当前版本时,我可以包含features2d和nonfree并顺利构建.唯一的问题仍然是一个标题:video/background_segm.hpp,仍然产生:
#include <list> !'list' file not found
Run Code Online (Sandbox Code Playgroud)
如果我评论该行,我会在下一行收到错误:
namespace cv !unknown type name 'namespace'
Run Code Online (Sandbox Code Playgroud)
很明显,编译器不会将其识别为C++标头,即使它是后缀.hpp.
在opencv2/video/video.hpp 如果我删除
#include "opencv2/video/background_segm.hpp"
Run Code Online (Sandbox Code Playgroud)
我也可以用video.hpp它来构建(虽然我猜它在实践中是无法使用的).
不幸的是,我仍然无法让SURF工作.当我运行该项目时,它崩溃了这个错误:
OpenCV错误:未实现功能/功能(OpenCV是在没有SURF支持的情况下构建的)
这是在legacy/features2d.cpp:
Ptr<Feature2D> surf = Algorithm::create<Feature2D>("Feature2D.SURF");
if( …Run Code Online (Sandbox Code Playgroud) 我正在开发一个实现,我在大背景图像中有一个矩形图像.我试图以编程方式从大图像中检索矩形图像,并从该特定矩形图像中检索文本信息.我正在尝试使用Open-CV第三方框架,但无法从大背景图像中检索矩形图像.有人可以指导我,我怎么能做到这一点?
更新:
我发现链接使用OpenCV找出方形.我可以修改它以找到矩形形状吗?有人可以指导我吗?
更新的最新消息:
我终于得到了代码,下面是它.
- (cv::Mat)cvMatWithImage:(UIImage *)image
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGFloat cols = image.size.width;
CGFloat rows = image.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将最新版本的OpenCV包含到现有的iOS项目中,并且因为我的XCode项目设置为使用libstdc ++而不是libc ++/C++ 11支持而导致链接器错误.
我见过其他几个通过启用libc ++修复错误的人.例子:
但是,我需要使用libstdc ++,因为我有其他第三方库已经使用较旧的stdlib编译(无法更改).有没有办法在没有-stdlib = libc ++的情况下编译OpenCV 2.4.3+?是否有特殊标志传递给CMake?或者OpenCV源代码的ios文件夹中的build_framework.py脚本?
或者,是否有人有二进制版本?似乎所有可从OpenCV下载的都假设是libc ++/C++ 11.
我一直试图用openCV运行一个xcode项目.我构建了源代码,将其导入到项目中,并在.pch文件中包含#ifdef __cplusplus #import opencv2/opencv.hpp> #endif.
我按照http://docs.opencv.org/trunk/doc/tutorials/introduction/ios_install/ios_install.html上的说明进行操作
我编译时仍然遇到很多Apple Mach-O链接器错误.
Undefined symbols for architecture i386:
"std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
Run Code Online (Sandbox Code Playgroud)
请帮帮我,我真的迷路了..
更新:
错误全部修复,现在我试图检测圈子..
Mat src, src_gray;
cvtColor( image, src_gray, CV_BGR2GRAY );
vector<Vec3f> circles;
/// Apply the Hough Transform to find the circles
HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, image.rows/8, 200, 100, 0, 0 );
/// Draw the circles detected
for( size_t i = 0; i < circles.size(); i++ )
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
// circle center
circle( src, …Run Code Online (Sandbox Code Playgroud)