opencv库编译无法通过
系统Ubuntu16.04 + ROS
由于ros自带opencv,为简化操作直接采用该自带的openc环境进行学习和开发。
1.环境变量设置
bash设置
sudo gedit /etc/bash.bashrc
在最后一行添加ros中opencv路径
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/ros/kinetic/lib/x86_64-linux-gnu/pkgconfig
export PKG_CONFIG_PATH
添加ros中opencv库文件路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开了一个空白文件,插入下面的路径:
/opt/ros/kinetic/lib/x86_64-linux-gnu/
2.试采用QT搭建环境
首先创建QT console工程
更改*.pro文件
QT += core
QT -= gui
TARGET = my_code
CONFIG += console
CONFIG -= app_bundle
CONFIG += c++11 console
DEFINES += QT_DEPRECATED_WARNINGS
INCLUDEPATH += /opt/ros/kinetic/include/opencv-3.3.1-dev/opencv \
/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv2 \
/opt/ros/kinetic/include \
/opt/ros/kinetic/include/opencv-3.3.1-dev
LIBS += /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv*
TEMPLATE = app
SOURCES += main.cpp
源文件如下:
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
void onMouse(int event, int x, int y, int flags, void* param);
main()
{
cv::Mat image;
image = cv::imread("/home/ray/Code/OpenCV3book/src/images/girl.jpg" , cv::IMREAD_COLOR );
if(image.empty())
{
cout << "读取失败" << endl;
}
cv::circle(image, cv::Point(image.cols/ 2, image.rows / 2), 100, cv::Scalar(0,255,0), 3);
cv::Mat image2(image);
cv::namedWindow("Image");
cv::namedWindow("Image2");
cv::imshow("Image", image);
cv::waitKey(0);
cv::imshow("Image2", image2);
cv::waitKey(0);
return 0;
发现涉及到图片输出显示就会报错
网上搜索了一下解决方案,可能是QT版本问题。由于QT还用作PX4环境,选择其他IDE,这里选择了VScode
3.VScode搭建环境
这里就简单多了
更改 c_cpp_properties.json 文件如下
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv",
"/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv2",
"/opt/ros/kinetic/include",
"/opt/ros/kinetic/include/opencv-3.3.1-dev"
],
"defines": [],
"compilerPath": "/opt/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++20",
"intelliSenseMode": "clang-x64",
"configurationProvider": "ms-vscode.cmake-tools",
"compilerArgs": [
"-std=c++11",
"-std=gnu++11"
]
}
],
"version": 4
}
或者按照图片设置
源码:
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
void onMouse(int event, int x, int y, int flags, void* param);
main()
{
cv::Mat image;
image = cv::imread("/home/ray/Code/OpenCV3book/src/images/girl.jpg" , cv::IMREAD_COLOR );
if(image.empty())
{
cout << "读取失败" << endl;
}
cv::circle(image, cv::Point(image.cols/ 2, image.rows / 2), 100, cv::Scalar(0,255,0), 3);
cv::Mat image2(image);
cv::namedWindow("Image");
cv::namedWindow("Image2");
cv::imshow("Image", image);
cv::waitKey(0);
cv::imshow("Image2", image2);
cv::waitKey(0);
return 0;
}
CMakeLists.txt文件
# cmake for OpenCV Cookbook 3rd edition chapter 01
# your opencv/build directory should be in your system PATH
# set minimum required version for cmake
cmake_minimum_required(VERSION 2.8)
find_package(OpenCV REQUIRED)
# add executable
add_executable( loadDisplaySave loadDisplaySave.cpp)
add_executable( logo logo.cpp)
add_executable( mat mat.cpp)
# link libraries
target_link_libraries( loadDisplaySave ${OpenCV_LIBS})
target_link_libraries( logo ${OpenCV_LIBS})
target_link_libraries( mat ${OpenCV_LIBS})
# copy required images to every directory with executable
SET (IMAGES ${CMAKE_SOURCE_DIR}/images/puppy.bmp ${CMAKE_SOURCE_DIR}/images/smalllogo.png)
FILE(COPY ${IMAGES} DESTINATION .)
FILE(COPY ${IMAGES} DESTINATION "Debug")
FILE(COPY ${IMAGES} DESTINATION "Release")
OK,在vscode下直接编译运行:
结果
环境搭建成功
ps:当用到c++11时,要在CMakeLists.txt中添加
SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")