私は OpenCV の初心者で、組み込みプラットフォームで実行される単純なアプリケーションを取得するために最善を尽くしています。OpenCV 2.4.4 をクロスコンパイルし、カメラと GUI のサポートの必要に応じて、WITH_GTK=ON、WITH_UNICAP=ON、WITH_V4L=ON をビルドしました。次のサンプル コードは、ホスト上でクロスコンパイルします。
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if (!cap.isOpened()) // check if we succeeded
return -1;
Mat edges;
namedWindow("edges", 1);
for (;;) {
Mat frame;
cap >> frame; // get a new frame from camera
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
imshow("edges", edges);
if (waitKey(30) >= 0)
break;
}
return 0;
}
静的リンクのためにこの方法でコンパイルします。
arm-linux-gnueabi-g++ -mcpu=cortex-a9 -mfpu=neon -static opencv_camshow.cpp -o exe -I/home/om/OpenCV-2.4.4/platforms/linux/build_soft/install/include -L/ home/om/OpenCV-2.4.4/platforms/linux/build_soft/install/lib -L/home/om/OpenCV-2.4.4/platforms/linux/build_soft/3rdparty/lib -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_imgproc - lopencv_core -lopencv_contrib -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_flann -lopencv_photo -lopencv_videostab -pthread -lm -lrt -lzlib -static
これが問題です。ターゲットで実行可能ファイル 'exe' を実行しようとすると、次のランタイム エラーが発生します。
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV Error: Unspecified error (関数が実装されていません。Windows、GTK+ 2.x、または Carbon サポートでライブラリを再構築します。Ubuntu または Debian を使用している場合は、libgtk2.0-dev と pkg をインストールしてください。 -config、次に cmake を再実行するか、スクリプトを構成します) cvNamedWindow、ファイル /home/om/OpenCV-2.4.4/modules/highgui/src/window.cpp、652 行目
'cv::Exception' のインスタンスをスローした後に呼ばれる終了
what(): /home/om/OpenCV-2.4.4/modules/highgui/src/window.cpp:652: エラー: (-2) 関数は実装されていません。Windows、GTK+ 2.x、または Carbon をサポートするライブラリを再構築します。Ubuntu または Debian を使用している場合は、libgtk2.0-dev と pkg-config をインストールしてから、cmake を再実行するか、関数 cvNamedWindow でスクリプトを構成します。
libgtk2.0-dev を再インストールし、pkg-config が存在し、OpenCV を再コンパイルしましたが、これは役に立ちませんでした。この問題を克服する方法を知っている人がいたら教えてください。前もって感謝します。〜オム
詳細情報: この問題の原因を突き止めましたが、まだ修正していません...
私の理解では、問題はopencvのcmakeスクリプトにあります。GTK の存在を認識しないため、gtk サポートなしでクロス コンパイルします。これは、arm ベースの gtk ライブラリがツールチェーンの lib フォルダーに存在し、そのパスがシステム パスにエクスポートされていることを確認した後です。