使用 Swift 语言将 OpenCV 集成到 Xcode 中
Integrate OpenCV into Xcode using Swift Language
我尝试按照本教程将OpenCV集成到Xcode中。 https://www.youtube.com/watch?v=ywUBHqxwM5Q
编辑:我尝试了更多教程,并且总是看到这些类型的警告。
但是,这样做后我发现了很多警告。我已经解决了其中的一些问题,但仍有大量警告。
警告被称为
Apple Mach-O Linker Warning Group:
direct access in function '___cxx_global_var_init' from
file '/Users/user/Desktop/OpenCV-SwiftTest/OpenCV-
SwiftTest/opencv2.framework/opencv2(flann.o)' to global weak symbol
'guard variable for
cvflann::anyimpl::SinglePolicy<cvflann::anyimpl::empty_any>::policy'
from file
'/Users/user/Library/Developer/Xcode/DerivedData/OpenCV-
SwiftTest-awmplbufjrmhqrbptnqhlxqxvptp/Build/Intermediates/OpenCV-
SwiftTest.build/Debug-iphonesimulator/OpenCV-SwiftTest.build/Objects-
normal/x86_64/OpenCVWrapper.o' means the weak symbol cannot be
overridden at runtime.
This was likely caused by different translation units being compiled
with different visibility settings.
我找到了一些相关的答案,例如
1.Symbols Hidden by Default
2.Inline Methods Hidden
由于本教程仅包含一个项目的 OpenCV,并且我已经根据上述要求检查了其设置。
这只是一个简单的项目,不同的翻译单元在哪里?
感谢您的任何帮助
Swift 不能直接使用 C++,所以你至少需要使用 Objective C 包装器来与 OpenCV 进行通信。
例如,我在C++类中有以下方法:
cv::Mat crop(const cv::Mat &src, cv::Rect2f &rect);
然后,我有一个存在于Objective-C++文件中的Objective-C方法(这意味着XCode中的文件名有第二个m(例如:MyWrapper.mm(。
在 Obj-C 中调用 this 的函数如下所示:
- (void)crop:(nonnull UIImage *)source
rect:(CGRect)rect
completionHandler:(nonnull ImageCompletionHandler)completionHandler {
MAT src = [Conversion cvMatWithImage:source];
RECT_2F rect_2f = [Conversion cvRectFromRect:rect];
MAT dst = self.basicPtr->crop(src, rect_2f);
completionHandler([Conversion imageFromCVMat:dst]);
}
- 第一个转换调用将
UIImage
转换为垫子以供 OpenCV 处理 - 第二个转换调用将
CGRect
转换为cv::Rect2f
- self.basicPts->crop(src, rect_2f( 函数使用指向我的类的指针来访问上面的裁剪函数
- 最后,我有一个闭包,它采用OpenCV给我的Mat对象并将其转换为iOS使用的
UIImage
然后,回到 Swift 领域,你需要首先为 Objective-C 包装器提供一个桥接标头,以便 Swift 可以访问它。
一旦你有了它,那么调用这个函数就变得微不足道了:
func crop(with image: UIImage, rect: CGRect) {
let wrapper = BasicWrapper()
wrapper.crop(image, rect: rect) { (image) in
// Handle image
}
}
填写所有这些部分需要做很多工作,但如果你环顾四周,你可以找到你需要的所有部分(我知道我做到了(。
相关文章:
- 将公共但非静态的成员函数与ALGLIB集成
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 将IBM Rhapsody模型集成到VS 2019中
- 从R调用C++函数并对其进行集成时出错
- Xcode 语义问题引用或以前定义的代码
- 使用 Xcode 将双精度存储在数组C++中
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 如何集成 HID USB 控制器?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- 将Qt集成到现有的VS项目中以取代WinAPI
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 将 Crashpad 与 Windows Qt 应用程序集成
- Python3.6 模板中的 CGAL C++ 集成错误
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- 使用 Swift 语言将 OpenCV 集成到 Xcode 中
- 可以将C++单元测试集成到Xcode的XCTest中吗?
- 通过在Xcode中包含合并的源代码来集成jsoncpp
- 将GSL与Xcode集成