Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时Opencv HighGui错误-“;HIGHGUI错误:V4L/V4L2:VIDIOC“U S U CROP”;。Opencv交叉编译。主机=64位Ubuntu 12.04。目标=手臂-皮质-A9_Opencv_Gtk_Arm_Ubuntu 12.04_Static Linking - Fatal编程技术网

运行时Opencv HighGui错误-“;HIGHGUI错误:V4L/V4L2:VIDIOC“U S U CROP”;。Opencv交叉编译。主机=64位Ubuntu 12.04。目标=手臂-皮质-A9

运行时Opencv HighGui错误-“;HIGHGUI错误:V4L/V4L2:VIDIOC“U S U CROP”;。Opencv交叉编译。主机=64位Ubuntu 12.04。目标=手臂-皮质-A9,opencv,gtk,arm,ubuntu-12.04,static-linking,Opencv,Gtk,Arm,Ubuntu 12.04,Static Linking,我是OpenCV的初学者,我会尽力让一个简单的应用程序在嵌入式平台上运行。我交叉编译了OpenCV 2.4.4,并根据需要使用_GTK=ON、_UNICAP=ON和_V4L=ON构建了它,以支持摄像头和GUI。以下示例代码在主机上交叉编译: #include <opencv/cv.h> #include <opencv/highgui.h> using namespace cv; int main(int, char**) { VideoCapture cap(

我是OpenCV的初学者,我会尽力让一个简单的应用程序在嵌入式平台上运行。我交叉编译了OpenCV 2.4.4,并根据需要使用_GTK=ON、_UNICAP=ON和_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;
}
#包括
#包括
使用名称空间cv;
int main(int,char**)
{
VideoCapture cap(0);//打开默认摄像机
if(!cap.isopend())//检查我们是否成功
返回-1;
垫边;
名称(“边缘”,1);
对于(;;){
垫架;
cap>>帧;//从相机获取新帧
CVT颜色(边框、边缘、CV_bgr2灰色);
高斯模糊(边,边,大小(7,7),1.5,1.5);
Canny(边,边,0,30,3);
imshow(“边”,边);
如果(等待键(30)>=0)
打破
}
返回0;
}
以这种方式编译静态链接:

#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/3rdparty/lib-lopencv-calid-lopencu-features2d-lopen-gp-lopencv_core-lopencv_contrib-lopencv_highgui-lopencv_ml-lopencv_video-lopencv_flann-lopencv_photo-lopencv_videostab-pthread-lm-lrt-lzlib-静态

问题出在这里。当我尝试在目标系统上运行可执行文件“exe”时,出现以下运行时错误:

#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;
}
HIGHGUI错误:V4L/V4L2:VIDIOC\u S\u裁剪 OpenCV错误:未指定的错误(该函数未实现。使用Windows、GTK+2.x或Carbon支持重建库。如果您在Ubuntu或Debian上,请安装libgtk2.0-dev和pkg config,然后重新运行cmake或configure脚本),位于CVNamedwindoww文件/home/om/OpenCV-2.4.4/modules/highgui/src/window.cpp,第652行

在引发“cv::Exception”的实例后调用terminate

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

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

更多信息: 我找出了导致此问题的原因,但尚未修复它


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

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

  • 正在搜索$PKG\u CONFIG\u路径中列出的目录
  • 当指定$PKG_CONFIG_LIBDIR时,它将覆盖在默认目录中编译的目录(例如/usr/lib/pkgconfig)和 打包配置路径。 请注意,在指定PKG_CONFIG_LIBDIR时,PKG CONFIG将完全忽略PKG_CONFIG_路径中的内容,即使 文档说明了不同的事情

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

如果不存在,则从synaptic软件包管理器安装
v4l2ucp
v4l utils
libv4l dev
。然后
cmake
并再次构建

这对我来说很有效,但我在Ubuntu 12.04上使用OpenCV和python绑定

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

也许可以帮你?谢谢Etienne的回复。在我的例子中,我尝试交叉编译,我拥有工具链中的所有库。此外,路径也会正确导出。我更新了这个问题,因为cmake首先无法定位gtk,因此在没有gtk支持的情况下交叉编译。我正在尝试解决这个问题。如果目标上有可用的
ldd
,请检查可执行文件正在查找哪些库。只是为了弄清楚。我需要将lib文件(例如libgdk-x11-2.0.so.0)从ARM linux传输到x86 linux,并将x86上的PKG_CONFIG_路径设置为指向该路径?通常您会一次交叉编译整个buildroot(除非您知道libs是用兼容的编译器编译的,否则在使用gcc-3.3与gcc-4.x混合使用时可能会发生令人讨厌的事情)