2012-04-30 2 views
6

OpenCV 2.3의 마지막 버전을 컴파일했습니다. 그리고 Matrix 입력/출력을 모두 InputArray/OutputArray로 변경하려는 결정은 모든 것을 엉망으로 만듭니다. OpenCV 2.2에서 잘 작동하는 동일한 코드 조각은 현재 가치가 없습니다.OpenCV InputArray/OutputArray

내가 받아들이는 두 가지 해결책이있다 : 나는 모든 모듈, 리눅스 OpenCV의 2.2을 다운로드 할 수있는

  1. 나를보기, 그것은 바느질 (나는 적절한 하나를 찾을려고 실종되지 않는 것이 중요하지만, 바느질은 항상 빠져 있습니다!).

  2. 아래에서 설명하는 내용을 해결할 수있게 도와주세요.

  3. OpenCV 2.4는 아직 베타 버전이더라도이 문제를 해결했으며 대신이 버전으로 이동해야합니다!

내가이 예외 메시지가 :

마지막으로
#0 0x00007ffff5df3445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 
#1 0x00007ffff5df6bab in __GI_abort() at abort.c:91 
#2 0x00007ffff674169d in __gnu_cxx::__verbose_terminate_handler()() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
#3 0x00007ffff673f846 in ??() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
#4 0x00007ffff673f873 in std::terminate()() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
#5 0x00007ffff673f96e in __cxa_throw() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
#6 0x00007ffff77fca51 in cv::error(cv::Exception const&)() from /usr/local/lib/libopencv_core.so.2.3 
#7 0x00007ffff791306d in cv::_InputArray::getMat(int) const() from /usr/local/lib/libopencv_core.so.2.3 
#8 0x00007ffff796064c in cv::perspectiveTransform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&)() from /usr/local/lib/libopencv_core.so.2.3 

가, 여기에 내가 이력서를 호출하고있어 내 코드입니다 : perspectiveTransform : GDB에서

OpenCV Error: Assertion failed (k == STD_VECTOR_MAT) in getMat, file /home/widgg/opencv/trunk/modules/core/src/matrix.cpp, line 928 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/widgg/opencv/trunk/modules/core/src/matrix.cpp:928: error: (-215) k == STD_VECTOR_MAT in function getMat 

을,이 스택입니다 :

std::vector<cv::Point2f> corners(4); 

cv::Mat cur_image = imread("my_image.jpg"); 

std::vector<cv::Point2f> img_corners(4); 

img_corners[0] = cv::Point2f(0, 0); 

img_corners[1] = cv::Point2f(cur_image.cols, 0); 

img_corners[2] = cv::Point2f(cur_image.cols, cur_image.rows); 

img_corners[3] = cv::Point2f(0, cur_image.rows); 

cur_image.release(); 

cv::perspectiveTransform(img_corners, corners, m_transf); 

그리고 cv :: Mat m_transf = (Mat_< double> (3,3) < < 1, 0, 0, 0, 1, 0, 0, 0, 1); 이것은 처음 사용되었을 때의 값이며, 그 위치에서 충돌합니다!

나는 cv :: FindHomography와 비슷한 문제가있다. 문제는 코드가 어제 제대로 실행되고 있었고 현재이 InputArray/OuputArray가 모든 것을 망쳐 놓고 있다는 것입니다.

정말 짜증나, 도와주세요!

또한이 보고서는 여기에서 발견되었습니다 : OpenCV 2.2 Vs. 2.3 그리고 좋은 징조는 아닙니다! 이에 대한 해결 방법이 있어야합니다!

답변

7

두 버전의 OpenCV가 설치되어 있고 링커가 코드를 컴파일하는 데 사용한 것과 다른 링커를 사용하려고합니다.

가장 간단한 방법은 다른 모든 OpenCV의 버전을 제거하는 것입니다, 다음 가능한 잘못된 라이브러리 경로는

(somelib.so 실종) 더 명시 적 또는, 링커 플래그를 모든 설정 경로를 확인하고 폴더를 포함합니다 include/complile/link 단계를 통해 동일한 버전을 사용하고 있는지 확인하십시오.

+0

감사합니다. 오늘 밤 이것을 확인하고 알려 드리겠습니다! – widgg

+0

감사합니다. 라이브러리 문제가 해결되었습니다! 내가 가진 OpenCV의 모든 인스턴스를 제거하고 내가 만든 버전을 설치하기 위해 make install을했습니다! – widgg

+0

그 답을 수락 해주십시오. – Sam