我是 OpenCV 的初学者,并尽我所能在嵌入式平台上运行一个简单的应用程序。我交叉编译了 OpenCV 2.4.4 并根据需要构建它 WITH_GTK=ON, WITH_UNICAP=ON, WITH_V4L=ON 以支持相机和 GUI。以下示例代码在主机上交叉编译:
#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 (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. 如果您在 Ubuntu 或 Debian 上,请安装 libgtk2.0-dev 和 pkg -config,然后在 cvNamedWindow 中重新运行 cmake 或配置脚本),文件 /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: error: (-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 文件夹中并且其路径导出到系统路径之后。