首先,我为这个新手问题道歉。我是Objective C和OpenCV的新手
Objective-C中的常规方法声明就像那样
Function functionName = [[Function alloc] init];
但是当我使用OpenCV类时,它说(例如CvMat)接收器类型不是Objective C类。
或者我想用C ++语法编写代码?
答案 0 :(得分:2)
您使用C ++语法编写代码。 Objective-C实际上是C ++的超集,这意味着任何C ++程序也是一个有效的Objective-C程序(在大多数情况下都是如此)。 Objective-C只是为C ++中已经存在的内容添加了许多功能。
当我为iOS开发openCV应用程序时,这里是主要的绊脚石:
将OpenCV编译为静态库。这是在iOS中使用OpenCV的唯一方法,如果您以前从未做过类似的事情,那么这不是一件容易的事。有一些很棒的博客文章介绍了如何操作,例如this one.
Armv6和armv7 - 确保为两者(或通用二进制文件)编译静态库,因为iOS在两者上运行。
编码时,只需像编写c ++一样编写代码。这是您可以参考的一大块示例代码。
// NOTE you SHOULD cvReleaseImage() for the return value when end of the code.
- (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {
// Getting CGImage from UIImage
CGImageRef imageRef = image.CGImage;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// Creating temporal IplImage for drawing
IplImage *iplimage = cvCreateImage(
cvSize(image.size.width,image.size.height), IPL_DEPTH_8U, 4
);
// Creating CGContext for temporal IplImage
CGContextRef contextRef = CGBitmapContextCreate(
iplimage->imageData, iplimage->width, iplimage->height,
iplimage->depth, iplimage->widthStep,
colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault
);
// Drawing CGImage to CGContext
CGContextDrawImage(
contextRef,
CGRectMake(0, 0, image.size.width, image.size.height),
imageRef
);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
// Creating result IplImage
IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);
cvCvtColor(iplimage, ret, CV_RGBA2BGR);
cvReleaseImage(&iplimage);
return ret;
}
答案 1 :(得分:0)
是。您应该使用特殊的工厂功能。
例如,CvMat
CvMat* cvCreateMat(int rows, int cols, int type);
如需更多信息,请使用documentation
答案 2 :(得分:0)
看看这个显示如何在iPhone上使用OpenCV的article。它提供了一个OpenCV框架,可以放入您自己的项目中,也支持视频捕获。