运行时Opencv HighGui错误-“;HIGHGUI错误:V4L/V4L2:VIDIOC“U S U CROP”;。Opencv交叉编译。主机=64位Ubuntu 12.04。目标=手臂-皮质-A9
我是OpenCV的初学者,我会尽力让一个简单的应用程序在嵌入式平台上运行。我交叉编译了OpenCV 2.4.4,并根据需要使用_GTK=ON、_UNICAP=ON和_V4L=ON构建了它,以支持摄像头和GUI。以下示例代码在主机上交叉编译:运行时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(
#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混合使用时可能会发生令人讨厌的事情)