공유 라이브러리를 사용하여 C ++ 애플리케이션에서 Matlab에 대한 기능 일치 알고리즘을 구현하고 있습니다. 문제는 함수에 4 개의 인수를 전달하지만 하나의 인수에 대한 값만 얻고 있다는 것입니다.
Matlab 기능 :
[c, d, e, f] = fm_test("C:\0.jpg", "C:\1.jpg");
function [FSC_1, FSC_2, NBCS_1, NBCS_2] = fm_test(path_im1, path_im2)
...
% Performed feature matching - output are 4 matrices with format n x 2 single
FSC_1 = matchedPoints1(inliersIndex, :);
FSC_2 = matchedPoints2(inliersIndex, :);
NBCS_1 = matchedPoints1(inliers_NBCS, :);
NBCS_2 = matchedPoints2(inliers_NBCS, :);
end
라이브러리 컴파일러를 사용하여 C ++ 용 공유 라이브러리를 만들고 함수를 호출합니다.
mclmcrInitialize();
//const char *args[] = { "-nojvm" };
//const int count = sizeof(args) / sizeof(args[0]);
if (!mclInitializeApplication(NULL, 0)) {
std::cerr << "Could not initialize the application properly" << std::endl;
return -1;
}
if (!fm_testInitialize()) {
std::cerr << "Could not initialize the library properly" << std::endl;
return -1;
}
else {
try {
for (size_t i = 0; i < cameras.size() - 1; ++i){
mwArray FSC_1, FSC_2, NBCS_1, NBCS_2;
mwArray path_1 = cameras[i].image_path.c_str();
mwArray path_2 = cameras[i+1].image_path.c_str();
fm_test(1, FSC_1, FSC_2, NBCS_1, NBCS_2, path_1, path_2);
// Convert mwArray to vector<double>
std::cout << " Printing sizes of mwArray" << std::endl;
std::cout << FSC_1.NumberOfElements() << std::endl;
std::cout << FSC_2.NumberOfElements() << std::endl;
std::cout << NBCS_1.NumberOfElements() << std::endl;
std::cout << NBCS_2.NumberOfElements() << std::endl;
}
}
catch (const mwException& e) {
std::cerr << e.what() << std::endl;
return -2;
}
catch (...) {
std::cerr << "Unexpected error thrown" << std::endl;
return -3;
}
fm_testTerminate();
}
결과는 다음과 같습니다.
Printing sizes of mwArray
100
0
0
0
함수에 여러 인수를 전달할 수 있습니까? mwArray
더 구체적 으로 정의해야 합니까?
Matlab 웹 사이트의 예제와 달리 다른 첫 번째 인수를 함수에 전달해야했습니다. 함수는 다음과 같이 정의됩니다.
extern LIB_fm_test_CPP_API void MW_CALL_CONV fm_test(int nargout, mwArray& FSC_1, mwArray& FSC_2, mwArray& NBCS_1, mwArray& NBCS_2, const mwArray& path_im1, const mwArray& path_im2);
첫 번째 인수는 출력으로 가지고있는 인수의 수로 변경되어야합니다 (제 경우에는 4). 올바른 함수 호출은 다음과 같습니다.
fm_test(4, FSC_1, FSC_2, NBCS_1, NBCS_2, path_1, path_2);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다