OpenCV数据结构(core)与基本图像处理算法(imgproc)拉取
./modules/core中包含着OpenCV常用的一些数据结构,如Mat,Rect等。
将./src下的precomp.hpp重命名为precomp_core.hpp,所有的./*.cpp中的#include “precomp.hpp”都要改为#include “precomp_core.hpp”,将所有头文件放入新建文件夹include中,所有源文件放入新建文件夹src中,注意所有的文件中,包含文件都要修改,如
#include "opencv2/core/gpumat.hpp"
#include "opencv2/core/opengl_interop.hpp"
不再需要前面的路径了,直接改为:
#include "gpumat.hpp"
#include "opengl_interop.hpp"
CMakeLists如下写:
CMAKE_MINIMUM_REQUIRED( VERSION 3.0 )
PROJECT( Matdebug )
AUX_SOURCE_DIRECTORY( . DIR_MAIN )
set(Include_path "${CMAKE_CURRENT_SOURCE_DIR}/include" CACHE STRING "" FORCE)
INCLUDE_DIRECTORIES(${Include_path})
FILE(GLOB_RECURSE INCS "*.h" "*.hpp")
#FILE(GLOB_RECURSE HEADERS *.h *.hpp)
SOURCE_GROUP("Include" FILES ${HEADERS} )
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
ADD_EXECUTABLE( Matdebug ${DIR_SRCS} ${INCS} )
#TARGET_LINK_LIBRARIES( Matdebug ${OpenCV_LIBS} )
./modules/highgui中包含着OpenCV的一些界面相关及读写操作等源码,由于对图像的读写操作需要依赖于一些图像格式的库,所以未做深究。
./modules/imgproc中包含着OpenCV的基础图像算法,同样,如core中源码一样,首先将./src下的precomp.hpp重命名为precomp_imgproc.hpp,所有的./*.cpp中的#include “precomp.hpp”都要改为#include “precomp_imgproc.hpp”,将所有头文件放入新建文件夹include中,所有源文件放入新建文件夹src中,修改所有文件的包含文件。
注意:这个precomp_core.hpp与precomp_imgproc.hpp有部分#define产生的重复,编译时会发出警告,如:
#define CV_FAST_CAST_8U(t) (assert(-256 <= (t) && (t) <= 512), icvSaturate8u_cv[(t)+256])
#define CV_CALC_MIN_8U(a,b) (a) -= CV_FAST_CAST_8U((a) - (b))
#define CV_CALC_MAX_8U(a,b) (a) += CV_FAST_CAST_8U((b) - (a))
可以加入#ifndef 和#endif修改,但是没有报错,所有就没有改。
没有highgui读图的函数,如何进行试验呢,考虑传进来的是数据流如指针等,在仿真时,就先将图像保存为/.txt文件(此时依赖了OpenCV环境)
然后再将保存的TXT数据读入,存到Mat结构中(此时的Mat不基于OpenCV库)
如做人脸识别,需要用到modules/objdetect中的一些方法,同上方法拉出,新建main.cpp。
如此这般,在VS中就可以编译通过。
将文件拷到Linux环境下进行编译:
需要进行一些修改,在core/system.cpp会报错,加上#include
#SET(THREADS_PREFER_PTHREAD_FLAG ON)
FIND_PACKAGE( Threads REQUIRED)
TARGET_LINK_LIBRARIES( Matdebug ${CMAKE_THREAD_LIBS_INIT})
在LoadData文件中,由于用了迭代器进行写入,所以在LoadData.cpp中需要包含#include
在终端进入该路径,(注意CMake的版本)
mkdir build
cd build/
cmake ../
make
运行:./ Matdebug