我是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文件夹中并将其路径导出到系统路径之后。
答案 0 :(得分:10)
执行cmake
语句后验证cmake
的输出是否包含以下文本:V4L/V4L2: Using libv4l
。
如果不存在,请从synaptic包管理器安装v4l2ucp
,v4l-utils
和libv4l-dev
。然后cmake
再次构建。
这对我有用,但我在Ubuntu 12.04上使用OpenCV与python绑定。
答案 1 :(得分:2)
为了交叉编译,你需要告诉pkg-config查找正确的路径(默认情况下这将是你的主机config / .pc文件!)
- 搜索$ 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