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

时间:2013-04-29 20:19:30

标签: opencv gtk arm ubuntu-12.04 static-linking

我是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错误:V4L / V4L2:VIDIOC_S_CROP OpenCV错误:未指定错误(该功能未实现。使用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 / windows.c:65:错误:( - 2)该函数未实现。使用Windows,GTK + 2.x或Carbon支持重建库。如果您使用的是Ubuntu或Debian,请安装libgtk2.0-dev和pkg-config,然后在cvNamedWindow函数中重新运行cmake或configure脚本

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

更多信息: 我弄清楚是什么导致了这个问题,但尚未修复它......

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

3 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:2)

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

From pkg-config website

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

答案 2 :(得分: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