我是靠谱客的博主 靓丽火,最近开发中收集的这篇文章主要介绍虚拟机Ubuntu中配置OpenCV环境并移植OpenCV(C/C++)代码最基础解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

移植环境

我用的16版本的VM,Ubuntu18.04,配置了OpenCV-3.4.3
如何在Ubuntu上配置OpenCV-3.4.3参考

对于以上链接博客的内容

注意:1、无法拽托文件压缩包:VM Tools没有正确安装,去找博客解决或者重装Ubuntu,如何判断?:->虚拟机->没有重新安装VMware Tools选项
2、压缩包一定要放对目录,不然unzip找不到文件
3、第五行代码apt-get install install pkg-config
改成sudo apt-get install pkg-config,不然报错
4、sata x:x是否自动连接问题,无关紧要。

知识储备

Linux简单的指令,需要在VS能成功运行的代码,一定的c/c++基础,百度、CSDN等

移植

1、找到目录并创建文件夹和必要的文件

在这里插入图片描述
进入安装好的OpenCV-3.4.3文件夹后右键进入终端

1、mkdir xxx   //在当前目录创建命名为xxx的文件夹
2、cd xxx      //进入创建好的xxx文件夹
3、touch x.cpp//在xxx中创建x.cpp文件,创建多文件用空格隔开

效果是这样的:
在这里插入图片描述
在这里插入图片描述

2、移植代码

把在VS2017(我用的)或其他能跑OpenCV平台的可运行代码复制到对应创建的文件里并保存

3、编写CMakeList.txt文件

文件我们都创建好了,怎么把.cpp文件和.h文件联系到一起编译呢?
这时我们需要改写CMakeList.txt文件来来实现。

# cmake needs this line
cmake_minimum_required(VERSION 2.8)//不要改动

# Define project name
project(xxx)//括号内为项目名xxx

# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)//不要动

# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

# Declare the executable target built from your sources
add_executable(xxx x.cpp xx.h)//前面为项目名,后面为链接的文件名,用空格隔开

# Link your application with OpenCV libraries
target_link_libraries(xxx ${OpenCV_LIBS})//改第一项的项目名就行了

注意:我是在OpenCV-3.4.3这个文件夹内创建的xxx文件夹,所以对于环境变量并没有做修改,如果是其他版本的OpenCV,则需要根据其对应版本实例的CMakeList.txt做对应的修改,不然环境变量会出问题。

4、编译运行

在xxx文件夹终端输入以下代码

1、cmake . .
2、make
3./xxx

运行结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中cpp文件代码如下:

目的是为了实现摄像头打开输出Hello OpenCV

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void drawText(Mat & image);

int main()
{
    cout << "Built with OpenCV " << CV_VERSION << endl;
    Mat image;
    VideoCapture capture;
    capture.open(0);
    if(capture.isOpened())
    {
        cout << "Capture is opened" << endl;
        for(;;)
        {
            capture >> image;
            if(image.empty())
                break;
            drawText(image);
            imshow("Sample", image);
            if(waitKey(10) >= 0)
                break;
        }
    }
    else
    {
        cout << "No capture" << endl;
        image = Mat::zeros(480, 640, CV_8UC1);
        drawText(image);
        imshow("Sample", image);
        waitKey(0);
    }
    return 0;
}

void drawText(Mat & image)
{
    putText(image, "Hello OpenCV",
            Point(20, 50),
            FONT_HERSHEY_COMPLEX, 1, // font face and scale
            Scalar(255, 255, 255), // white
            1, LINE_AA); // line thickness and type
}

but

细心的同学已经发现了一个问题:摄像头打不开

原因是USB类型没有改成3.1,将虚拟机关机修改后在虚拟机->可移动设备中打开摄像头即可在这里插入图片描述
在这里插入图片描述

5、排查错误

一、如果你移植的代码有问题,在cmake . .阶段就会报错,这就需要一个一个去排查错误了

以下是我个人遇到的问题:

cmake阶段常见的错误:
1、头文件问题(window.h不可用等)
2、不可引用临时分配的变量的地址
比如 Mat类型强转IplImage时
&((IplImage)x_image)作为cvFindContours的第一个参数时会发生错误
正确应该在引用之前给分配内存
3、使用IplImage数组时发生cvPtr2D错误(未知,目前还没找到解决方法,改成Mat向量好点?)
3、参考其他博客

二、imshow不显示图片:在imshow函数下加waitKay(1);即可

希望能给一些小伙伴提供思路,不完善的地方请大佬们斧正。

最后

以上就是靓丽火为你收集整理的虚拟机Ubuntu中配置OpenCV环境并移植OpenCV(C/C++)代码最基础解析的全部内容,希望文章能够帮你解决虚拟机Ubuntu中配置OpenCV环境并移植OpenCV(C/C++)代码最基础解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部