我正在尝试使用openCV的decomposeHomographyMat
函数。我更像是一个斯威夫特人,但为此,我要使用Objective C神秘语言。该功能的签名是
cv::decomposeHomographyMat(
<#InputArray H#>,
<#InputArray K#>,
<#OutputArrayOfArrays rotations#>,
<#OutputArrayOfArrays translations#>,
<#OutputArrayOfArrays normals#>
)
我输入的K和H都是NSArray<NSNumber*> *_Nonnull
,每个都有9个元素。
如何创建预期的InputArray
和OutputArrayOfArrays
,如何将OutputArrayOfArrays
转换回类型,Objective C可以传递给swift?
===编辑===
尝试使用以下语句调用cv::decomposeHomographyMat
时,Quang的答案崩溃了。
OpenCV Error: Assertion failed (0 <= i && i < (int)vv.size()) in getMat_,
file .../opencv/modules/core/src/matrix.cpp, line 1287
代码是:
+ (nullable NSArray<NSNumber*> *) decomposeHomography:(NSArray<NSNumber*> *_Nonnull) homography intrisics:(NSArray<NSNumber*> *_Nonnull) intrisics
{
cv::Mat rotations, translations, normals;
vector<vector<float> > H(3,vector<float>(3));
for (int i = 0; i<3; ++i){
for (int j = 0; j<3; ++j){
H[i][j] = [homography[i*3 + j] floatValue];
}
}
vector<vector<float> > K(3,vector<float>(3));
for (int i = 0; i<3; ++i){
for (int j = 0; j<3; ++j){
K[i][j] = [intrisics[i*3 + j] floatValue];
}
}
cv::decomposeHomographyMat(
H,
K,
rotations,
translations,
normals
);
NSLog(@"ok");
}
答案 0 :(得分:1)
您需要将android:backgroud="@drawable/yourimage"
转换为NSArray
并将其提供给std::vector<vector<float> >
。例如
cv::decomposeHomographyMat