我在做简单的OpenCV程序介绍。我正在Virtualbox中运行(如Ubuntu20.04)。C++/ VS代码。LLDB调试器如果我在MacOS或Windows上运行virtualbox,也会出现同样的错误。
---主.cpp---
#include <opencv2/opencv.hpp> // Catch all for all libraries within OpenCV
int main()
{
cv::VideoCapture cap; //initialize capture
cap.open(0);
if (!cap.isOpened()) // check if succeeded to connect to the camera
CV_Assert("Cam open failed");
cap.set(cv::CAP_PROP_FRAME_WIDTH, 1280);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 720);
// cv::namedWindow("window", 1); //create window to show image
while (1)
{
cv::Mat image; //Create Matrix to store image
cap >> image; //copy webcam stream to image
// If the frame is empty, break immediately
if (image.empty())
break;
cv::imshow("window", image); //print image to screen. <-- fail here.
cv::waitKey(33); //delay 33ms
}
return 0;
}
--CMakeLists.txt--
# https://gist.github.com/UnaNancyOwen/5061d8c966178b753447e8a9f9ac8cf1
cmake_minimum_required(VERSION 3.0.0)
set(CMAKE_TOOLCHAIN_FILE "/home/vagrant/Desktop/vcpkg/scripts/buildsystems/vcpkg.cmake")
project(openCV_test VERSION 0.1.0)
add_executable(${PROJECT_NAME} main.cpp)
set(OpenCV_DIR "/home/vagrant/Desktop/vcpkg/installed/x64-linux/share/opencv")
# set(WITH_GTK "ON") # testing here...
# set(WITH_QT "OFF")
find_package(OpenCV REQUIRED)
# Display some variables
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
if( OpenCV_FOUND )
# Additional Include Directories
include_directories( ${OpenCV_INCLUDE_DIRS} )
# Additional Library Directories
link_directories( ${OpenCV_LIB_DIR} )
# Additional Dependencies
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} )
endif()
注意,我尝试从git手工构建OpenCV包,并使用VCPKG包管理器。无论哪种结果都一样。同样的失败。注意,摄像机在virtualbox中工作得很好。通过 html5 网站上的 virtualbox 浏览器测试相机的使用情况。当我逐步执行代码时,我可以看到相机LED在适当的时间亮起。系统在代码行cv::imshow()处持续崩溃。
错误消息声明:
在抛出“cv::Exception”实例后调用终止
what(): OpenCV(4.5.1-dev) /home/vagrant/opencv-master/modules/highgui/src/window.cpp:679: 错误:(-2:未指定错误) 该函数未实现。使用 Windows、GTK+ 2.x 或 Cocoa 支持重建库。如果您使用的是 Ubuntu 或 Debian,请安装 libgtk2.0-dev 和 pkg-config,然后在函数“cvShowImage”中重新运行 cmake 或配置脚本
下面是imshow()函数的类信息:
void::imshow(const::String &winname,cv::InputArray mat) +1重载
在指定窗口中显示图像。函数 imshow 在指定窗口中显示图像。如果窗口是使用 cv::WINDOW_AUTOSIZE 标志创建的,则图像将以其原始大小显示,但仍受屏幕分辨率的限制。否则,图像将缩放以适合窗口。该函数可能会根据图像的深度缩放图像:- 如果图像是 8 位无符号数,则按原样显示。- 如果图像是 16 位无符号数或 32 位整数,则像素除以 256。也就是说,值范围 [0,255
参数: winname -窗口的名称。mat-图像显示。
我尝试了 libgtk2.0-dev 和 pkg-config 的所有安装组合,但都没有成功。我甚至在构建 OpenCV 库之前安装了这些库,但结果始终(失败)。我知道一年前我在虚拟机上成功使用了此示例。错误消息是否准确表示失败,这一点并不明确。
发布于 2021-02-19 08:14:06
因此,这是一个屏幕截图的错误,注意到在进行调试时,一步一步。该错误说明该函数未实现。使用Windows、GTK+ 2.x或Cocoa支持重新构建库。如果您在Ubuntu或Debian上,安装libgtk2.0dev和pkg,那么在函数“cvShowImage”中重新运行cmake或配置脚本对我来说完全没有意义。但是仔细看看绿色圆圈里的音符。哪个高鬼是哪个?唉哟。这些双目录是在试图通过VCPKG包管理器安装OpenCV (CMakeLists.txt严重失败)之后创建的。然后,我通过github回购完成了一个额外的安装。我没有删除VCPKG的东西。这真是一团糟。
修复?删除整个virtualbox并从头开始。我在github源代码中成功地构建了OpenCV,遵循了https://linuxize.com/post/how-to-install-opencv-on-debian-10/中概述的步骤
$ sudo apt install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev
$ mkdir ~/opencv_build && cd ~/opencv_build
$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git
$ cd ~/opencv_build/opencv
$ mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
$ make -j4 # Start the compilation process (long time!)
$ sudo make install # Install OpenCV
$ pkg-config --modversion opencv4 # test the install
--> 4.5.1
我仍然不完全理解rebuild the library... GTK.. pkg-config
的全部内容,但我怀疑根本问题在于对支持库位于何处的困惑。信息张贴在这里,以防其他人击中错误信息。
还有一个附加说明--这是我的最后一个CMakeLists.txt文件,它与从源代码构建的库完全兼容:
cmake_minimum_required(VERSION 3.0.0)
project(openCV_test VERSION 0.1.0)
add_executable(${PROJECT_NAME} main.cpp)
set(OpenCV_DIR "/usr/local/lib") # per github install of OpenCV
find_package(OpenCV REQUIRED)
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
https://stackoverflow.com/questions/66133421
复制相似问题