【发布时间】:2021-02-10 08:36:55
【问题描述】:
我正在使用简单的介绍 OpenCV 程序。我在 Virtualbox 中运行(作为 Ubuntu 20.04)。 C++/VS 代码。 LLDB 调试器。如果我在 MacOS 或 Windows 上运行 virtualbox,也会出现同样的错误。
---main.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 repo 手动构建 OpenCV 包,并使用 VCPKG 包管理器。无论哪种方式,结果都相同。同样失败。请注意,相机在 virtualbox 中效果很好。通过在 html5 网站上的 virtualbox 浏览器中进行测试,以测试相机的使用。当我逐步执行代码时,我可以看到相机 LED 在适当的时间亮起。系统炸弹始终在 cv::imshow() 代码行。
错误消息状态:
在抛出 'cv::Exception' 实例后调用终止
什么():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,然后重新运行 cmake 或 在函数'cvShowImage'中配置脚本
这是 imshow() 函数的类信息:
void cv::imshow(const cv::String &winname, cv::InputArray mat) +1 过载
在指定窗口中显示图像。函数显示 在指定窗口中显示图像。如果创建了窗口 使用 cv::WINDOW_AUTOSIZE 标志,图像显示为 原始尺寸,但它仍然受到屏幕分辨率的限制。 否则,将缩放图像以适合窗口。该功能可能 缩放图像,取决于其深度: - 如果图像是 8 位 无符号,按原样显示。 - 如果图像是 16 位无符号或 32位整数,像素除以256。即值 范围 [0,255
参数: winname – 窗口的名称。 mat – 要显示的图像。
我已经完成了 libgtk2.0-dev 和 pkg-config 的所有安装组合,但没有结果。我什至在构建具有一致(失败)结果的 OpenCV 库之前安装了这些库。我知道一年前我在一个虚拟机上成功地使用了这个例子。完全不清楚错误消息是否准确表示失败。
【问题讨论】:
-
我看到你评论了创建窗口的行?
-
我不知道流是如何工作的。我个人习惯打电话:
bool success = cap.read(image); -
你能在
imshow之前加一个检查器吗?比如:if(image.data)
标签: c++ opencv ubuntu virtualbox vcpkg