在实际项目中会经常用到一些基本的图像处理操作,而且经常拿OpenCV进行结果对比,因此这里从OpenCV中提取了一些代码组织成fbc_cv库。项目fbc_cv所有的代码已放到GitHub中,地址为  https://github.com/fengbingchun/OpenCV_Test ,它不依赖任何第三方库,目前包含的算法有:resize, cvtColor, merge, split, remap, warpAffine, rotate, warpPerspective, dilate, erode, morphologyEx, threshold, transpose, flip, dft, idft,后面还会再增加一些。也会将一些算法改为CUDA实现,地址为:https://github.com/fengbingchun/CUDA_Test.  fbc_cv库对应对应的OpenCV版本为3.1。目前已添加的这些算法与OpenCV 3.1的结果完全一致

在编译OpenCV 3.1源码时有一些注意事项:

(1). 在用CMake编译时,关闭OpenCL, CUDA, OpenMP, TBB, SIMD选项;

(2). 调整源码中modules/core/include/opencv2/core/cvdef.h文件,将第167行改为: #if  0

(3). 调整源码中modules/core/include/opencv2/core/fast_math.hpp文件,使其cvFound/cvFloor/cvCeil/cvRound函数执行最后的判断条件。

fbc_cv库既支持在Windows7/10上vs2013编译,也支持在Linux上通过CMake编译,而且两个平台上的结果都与OpenCV 3.1是一致的

vs2013工程截图如下:

Ubuntu 14.04上编译fbc_cv:

build.sh文件内容如下:

#! /bin/bashbuild_mode=release
if [ $# == 1 ]; thenbuild_mode=debug
fi
echo "build mode: ${build_mode}"real_path=$(realpath $0)
dir_name=`dirname "${real_path}"`
echo "real_path: ${real_path}, dir_name: ${dir_name}"data_dir="test_images"
if [ -d ${dir_name}/${data_dir} ]; thenrm -rf ${dir_name}/${data_dir}
filn -s ${dir_name}/./../../${data_dir} ${dir_name}new_dir_name=${dir_name}/build
mkdir -p ${new_dir_name}
cd ${new_dir_name}
cmake .. -DBUILD_MODE=${build_mode}
makecd -

CMakeLists.txt文件内容如下:

PROJECT(OpenCV_Test)
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)# support C++11
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# support C++14, when gcc version > 5.1, use -std=c++14 instead of c++1y
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")IF (BUILD_MODE STREQUAL "debug")MESSAGE(STATUS "****** BUILD MODE: DEBUG ******")SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -g -Wall -O2")
ELSE()MESSAGE(STATUS "====== BUILD MODE: REALSE ======")SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
ENDIF()MESSAGE(STATUS "project source dir: ${PROJECT_SOURCE_DIR}")
SET(PATH_TEST_FILES ${PROJECT_SOURCE_DIR}/./../../demo/OpenCV_Test)
SET(PATH_SRC_FILES ${PROJECT_SOURCE_DIR}/./../../src/fbc_cv)
MESSAGE(STATUS "path src files: ${PATH_TEST_FILES}")# head file search path
INCLUDE_DIRECTORIES(${PATH_TEST_FILES}${PATH_SRC_FILES}/include/opt/opencv3.1/include
)# find library
FIND_LIBRARY(opencv_core NAMES opencv_core PATHS /opt/opencv3.1/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_imgproc NAMES opencv_imgproc PATHS /opt/opencv3.1/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_highgui NAMES opencv_highgui PATHS /opt/opencv3.1/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_imgcodecs NAMES opencv_imgcodecs PATHS /opt/opencv3.1/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_video NAMES opencv_video PATHS /opt/opencv3.1/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_videoio NAMES opencv_videoio PATHS /opt/opencv3.1/lib NO_DEFAULT_PATH)
MESSAGE(STATUS "opencv libraries: ${opencv_core} ${opencv_imgproc} ${opencv_highgui} ${opencv_imgcodecs} ${opencv_video}" ${opencv_videoio})# recursive query match files :*.cpp, *c
FILE(GLOB_RECURSE TEST_CPP_LIST ${PATH_TEST_FILES}/*.cpp)
FILE(GLOB_RECURSE TEST_C_LIST ${PATH_TEST_FILES}/*.c)
#MESSAGE(STATUS "cpp list: ${TEST_CPP_LIST} ${TEST_C_LIST}")FILE(GLOB_RECURSE SRC_CPP_LIST ${PATH_SRC_FILES}/*.cpp)
#MESSAGE(STATUS "src cpp list: ${SRC_CPP_LIST}")# generate dynamic library for fbc_cv
ADD_LIBRARY(fbc_cv SHARED ${SRC_CPP_LIST})# build executable program
ADD_EXECUTABLE(OpenCV_Test ${TEST_CPP_LIST} ${TEST_C_LIST})
# add dependent library: static and dynamic
TARGET_LINK_LIBRARIES(OpenCV_Test fbc_cv ${opencv_core} ${opencv_imgproc} ${opencv_highgui} ${opencv_imgcodecs} ${opencv_video} ${opencv_videoio} pthread)

这两个文件的位置在:prj/linux_cmake_OpenCV_Test目录下,编译方法:将终端定位到此目录下,执行:

$ ./build.sh :编译生成release的fbc_cv动态库和OpenCV_Test测试执行文件;

$ ./build.sh 1:bian编译生成debug的fbc_cv动态库和OpenCV_Test测试执行文件。

图像处理库(fbc_cv):源自OpenCV代码提取相关推荐

  1. OpenCV代码提取:Windows上通过DShow获取Camera视频

    在OpenCV 3.1中获取视频的模块在videoio(video input and output module)中,调用VideoCapture类接口,除了videoio模块外还依赖core.hi ...

  2. OpenCV代码提取:flip函数的实现

    OpenCV中实现图像翻转的函数flip,公式为: 目前fbc_cv库中也实现了flip函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一致. 实现代码fli ...

  3. OpenCV代码提取:transpose函数的实现

    OpenCV中的transpose函数实现图像转置,公式为: 目前fbc_cv库中也实现了transpose函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一 ...

  4. OpenCV代码提取:cvtColor函数的实现

    OpenCV中的cvtColor函数包括了很多颜色格式之间的转换,用起来很方便,这里对cvtColor函数的code进行了提取,经测试,和OpenCV3.1结果完全一致. 实现代码cvtColor.h ...

  5. OpenCV代码提取:resize函数的实现

    之前在http://blog.csdn.net/fengbingchun/article/details/17335477 中有过对cv::resize函数五种插值算法的介绍.这里将OpenCV3.1 ...

  6. 两大图像处理库Halcon和Opencv 的对比

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 OpenCV Halcon 开发语言 C++.C#(emgu).P ...

  7. OpenCV代码提取:rotate函数的实现

    OpenCV中并没有直接提供实现rotate的函数,这里通过getRotationMatrix2D和warpAffine函数实现rotate,并增加了一个crop参数,用来判断是否进行crop.目前支 ...

  8. OpenCV代码提取:merge/split函数的实现

    对OpenCV中的merge/split函数进行了实现,经测试,与OpenCV3.1结果完全一致. merge实现代码merge.hpp: // fbc_cv is free software and ...

  9. OpenCV代码提取:遍历指定目录下指定文件的实现

    OpenCV 3.1之前的版本,在contrib目录下有提供遍历文件的函数,用起来比较方便.但是在最新的OpenCV 3.1版本给去除掉了.为了以后使用方便,这里将OpenCV 2.4.9中相关的函数 ...

最新文章

  1. H2:开源内存数据库引擎
  2. [系统开发] Postfix 邮件管理系统
  3. 【Java小工匠聊密码学】--base58编码
  4. Putty、Xshell连接Linux
  5. Android Studio快捷键(MAC版)
  6. web开发 学习_是否想学习Web开发但不知道从哪里开始?
  7. 设置电脑系统密码以及桌面密码
  8. CodeBlocks常用快捷键
  9. 网传各高校教授经典语录
  10. aswing学习笔记2-不规则外框-请教思路
  11. 海康SDK数据类型转java
  12. 【浏览器】谷歌浏览器自带翻译失效
  13. 不积跬步 无以至千里 不积小流 无以成江海
  14. 马克飞象怎么转成html,马克飞象教程
  15. 自制嵌入式操作系统 DAY1
  16. 质因子分解(Java)
  17. Lined List 链表总结 Reverse链表 - 反转(python) leetcode 206 92
  18. 神经网络中前向传播和反向传播解析
  19. 计算机科学 泰勒级数,一阶常微分方程泰勒级数解法的计算机实现.pdf
  20. Java8 Lambda表达式(三)Lambda表达式与Stream API

热门文章

  1. 使用Python、OpenCVImageMagick工具箱制作GIF动画
  2. 在Python上使用OpenCV检测和跟踪行人
  3. NanodetPlus网络结构
  4. 一、multiprocessing.pool.RemoteTraceback
  5. PCL之C++动态内存学习
  6. 【怒怼老乔】居然苹果手机IOS系统还不支持css3的transparent属性值,我去~~~~
  7. LTE - PUCCH Format2
  8. linux文件权限详解
  9. 开源工程系列之讯飞VBOX改装蓝牙5.0(aptX HD)音箱
  10. Tensorflow多线程输入数据处理框架(一)——队列与多线程