运行时Opencv HighGui错误 - "HIGHGUI错误:V4L/V4L2:VIDIOC_S_CROP".Opencv交叉编译.主机= 64位Ubuntu 12.04.目标= ARM-的Cortex-A9

om9*_*om9 11 gtk opencv arm static-linking ubuntu-12.04

我是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;
}
Run Code Online (Sandbox Code Playgroud)

为静态链接编译这种方式:

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错误:V4L/V4L2:VIDIOC_S_CROP OpenCV错误:未指定错误(该功能未实现.使用Windows,GTK + 2.x或Carbon支持重建库.如果您使用的是Ubuntu或Debian,请安装libgtk2.0-dev和pkg -config,然后在cvNamedWindow中重新运行cmake或configure脚本),文件/home/om/OpenCV-2.4.4/modules/highgui/src/window.cpp,第652行

在抛出'cv :: Exception'的实例后终止调用

what():/ home/om/OpenCV-2.4.4/modules/highgui/src/windows.pp:652:错误:( - 2)该函数未实现.使用Windows,GTK + 2.x或Carbon支持重建库.如果您使用的是Ubuntu或Debian,请安装libgtk2.0-dev和pkg-config,然后在cvNamedWindow函数中重新运行cmake或configure脚本

我重新安装了libgtk2.0-dev,pkg-config存在并重新编译了OpenCV,但这没有帮助.如果有人知道如何克服这个问题,请告诉我.提前致谢.〜嗡

更多信息: 我弄清楚是什么导致了这个问题,但还没有解决它...

根据我的理解,问题在于opencv的cmake脚本.它不承认GTK的存在,因此交叉编译没有gtk支持.确保基于arm的gtk库存在于工具链的lib文件夹中并将其路径导出到系统路径之后.

Var*_*mar 10

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

如果它不存在,那么安装v4l2ucp,v4l-utilslibv4l-dev从synaptic包管理器.然后cmake再次构建.

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


dra*_*hnr 2

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

来自 pkg-config 网站

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