11

我是 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 文件夹中并且其路径导出到系统路径之后。

4

3 回答 3

11

在执行cmake语句验证输出是否cmake包含以下文本后:V4L/V4L2: Using libv4l.

如果它不存在,则安装v4l2ucpv4l-utilslibv4l-dev从突触包管理器。然后cmake再次构建。

这对我有用,但我在 Ubuntu 12.04 上使用 OpenCV 和 python 绑定。

于 2014-09-18T05:38:43.543 回答
2

为了交叉编译,您需要告诉 pkg-config 查找正确的路径(默认情况下,这将是您的主机配置/.pc 文件!)

来自 pkg-config 网站

  • 搜索 $PKG_CONFIG_PATH 中列出的目录
  • 当指定 $PKG_CONFIG_LIBDIR 时,它将覆盖在默认目录(例如 /usr/lib/pkgconfig)和 PKG_CONFIG_PATH 中编译的内容。请注意,当指定 PKG_CONFIG_LIBDIR 时,pkg-config 将完全忽略 PKG_CONFIG_PATH 中的内容,即使文档说明了不同的内容。
于 2014-05-13T11:10:53.517 回答
0

Opencv highgui 错误

必须使用 cmake 重新安装 opencv

git clone https://github.com/Itseez/opencv.git
cd ~/opencv 
mkdir release 
cd release 
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_IPP=OFF ..
make -j4 sudo 
make install
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
于 2016-12-13T09:12:53.877 回答