概述
移植环境
我用的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++)代码最基础解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复