OpenCV InputArray / OutputArray

Ich hatte gerade die letzte Version von OpenCV 2.3 kompiliert. Und ihre Entscheidung, alle Matrix-Ein- / Ausgaben in InputArray / OutputArray zu ändern, bringt alles durcheinander. Das gleiche Stück Code, das unter OpenCV 2.2 gut funktioniert hat, ist jetzt wertlos.

Es gibt zwei Lösungen, die ich akzeptieren würde:

Wenn ich sehe, wo ich OpenCV 2.2 für Linux mit allen Modulen herunterladen kann, ist es wichtig, dass das Stitching nicht fehlt (ich habe versucht, ein passendes zu finden, aber es fehlt immer das Stitching!).

Hilf mir zu lösen, was ich unten beschreibe.

OpenCV 2.4, auch wenn es noch Beta ist, hat dies behoben und ich sollte stattdessen auf diese Version umsteigen!

Ich habe diese Ausnahmemeldung:

<code>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
</code>

In gdb ist dies der Stack:

<code>#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
</code>

Zum Schluss ist hier mein Code, wenn ich cv :: perspectiveTransform aufrufe:

<code>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);
</code>

Und cv :: Mat m_transf = (Mat_ <double> (3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1), das ist sein Wert, wenn es zum ersten Mal verwendet wird, und es stürzt ab an diesem Ort!

Ich habe ein ähnliches Problem mit cv :: FindHomography. Die Sache ist, dass der Code gestern und heute richtig ausgeführt wurde. Diese InputArray / OuputArray-Sache hat alles vermasselt.

Es ist sehr ärgerlich, bitte helfen Sie!

Auch diesen Bericht habe ich hier gefunden:OpenCV 2.2 Vs. 2.3 und es ist kein gutes Zeichen! Hierfür sollte es eine Problemumgehung geben!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage