首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法通过cv::imshow()显示窗口。我遗漏了什么?

无法通过cv::imshow()显示窗口。我遗漏了什么?
EN

Stack Overflow用户
提问于 2021-02-10 08:36:55
回答 1查看 1.7K关注 0票数 1

我在做简单的OpenCV程序介绍。我正在Virtualbox中运行(如Ubuntu20.04)。C++/ VS代码。LLDB调试器如果我在MacOS或Windows上运行virtualbox,也会出现同样的错误。

---主.cpp---

代码语言:javascript
运行
复制
#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--

代码语言:javascript
运行
复制
# 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 库之前安装了这些库,但结果始终(失败)。我知道一年前我在虚拟机上成功使用了此示例。错误消息是否准确表示失败,这一点并不明确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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/中概述的步骤

代码语言:javascript
运行
复制
$ 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文件,它与从源代码构建的库完全兼容:

代码语言:javascript
运行
复制
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})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66133421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档