ISP 【一】————boost标准库使用——批量读取保存文件 /boost第三方库的使用及其cmake添加,图像gramma
CMakeLists.txt文件中需要添加第三方库,并企鹅在CMakeLists.txt中添加
include_directories(${PROJECT_SOURCE_DIR}/../3party/gflags-2.2.2/include)
link_directories(${PROJECT_SOURCE_DIR}/../3party/boost-1.73.0/lib-import)
target_link_libraries(
gramma_ir
opencv_world343
gflags_static(看情况添加,具体指向静态库,或者动态库)
)
对应的cmake
cmake_minimum_required(VERSION 3.1)project(gramma_ir)set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})include_directories(${PROJECT_SOURCE_DIR}/../3party/boost-1.73.0/include)include_directories(${PROJECT_SOURCE_DIR}/../3party/gflags-2.2.2/include)include_directories(${PROJECT_SOURCE_DIR}/../include)
include_directories(${PROJECT_SOURCE_DIR}/../include/opencv)
include_directories(${PROJECT_SOURCE_DIR}/../include/opencv2)link_directories(${PROJECT_SOURCE_DIR}/../lib)
link_directories(${PROJECT_SOURCE_DIR}/../3party/boost-1.73.0/lib-import)
link_directories(${PROJECT_SOURCE_DIR}/../3party/gflags-2.2.2/lib-static)add_executable(gramma_ir gramma_ir.cc)
target_link_libraries(gramma_iropencv_world343 gflags_staticgflags_nothreads_staticgflags_nothreads_static_debuggflags_static_debug#boost_filesystem-vc140-mt-x64-1_73#libboost_regex-vc140-mt-s-x64-1_73
)
调用boost库,批量处理图片或者单张图片处理
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui.hpp>
#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <cv.h>
#include <cxcore.h>
#include <cvaux.h>
#include <stdlib.h>
#include <imgproc.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui_c.h>#include <boost/filesystem.hpp>
#include <boost/regex.hpp>
#include <gflags/gflags.h>using namespace std;
using namespace cv;void GetGammaCorrection(Mat& src, Mat& dst, const float fGamma)
{unsigned char bin[256];for (int i = 0; i < 256; ++i){bin[i] = saturate_cast<uchar>(pow((float)(i / 255.0), fGamma) * 255.0f);}dst = src.clone();uchar* ptr = dst.ptr<uchar>(0);for (int i = 0; i < 400 * 640; ++i){ptr[i] = bin[ptr[i]];}
}void ProcessImage(const std::string& path, float Gamma, cv::Mat& output) {//const std::string path_ir = path;cv::Mat src = cv::imread(path, IMREAD_UNCHANGED);std::cout << src.channels() << std::endl;if (src.empty()){cout << "Error: Could not load image" << endl;}int fGamma = Gamma;cv::Mat gamma_dst;GetGammaCorrection(src, gamma_dst, fGamma);output = gamma_dst;
}int main(int argc, char** argv)
{ boost::filesystem::path input_path(argv[1]);cv::Mat dst;float fGamma = 1 / 1.8;int count = 0;if (boost::filesystem::is_regular_file(input_path)) {cv::Mat src = cv::imread(input_path.string(), IMREAD_UNCHANGED);GetGammaCorrection(src, dst, fGamma);imshow("dst", dst);cv::imwrite("../result/ir.png", dst);}else{boost::filesystem::path dir_path = input_path.parent_path();boost::regex filter(input_path.filename().string());boost::filesystem::directory_iterator end_itr; for (boost::filesystem::directory_iterator itr(dir_path); itr != end_itr; itr++) {//directory_iterator(p)就是迭代器的起点,无参数的directory_iterator()就是迭代器的终点。if (!boost::filesystem::is_regular_file(itr->status()))// is_regular_file 判断是否是普通文件continue;boost::smatch what;if (!boost::regex_match(itr->path().filename().string(), what, filter))continue;cv::Mat src = cv::imread(itr->path().string(), IMREAD_UNCHANGED);GetGammaCorrection(src, dst, fGamma);imshow("dst", dst); count++;string dstPath;dstPath = "../result/"+ std::to_string(count) + ".png";cv::imwrite(dstPath.c_str(),dst);std::cout << count << std::endl;} } //cv::waitKey(0);return 0;
}
如果在编译的过程中出现如下问题,那么可能出现的问题以及对应的解决情况如下所示:
Opencv生成exe可执行文件于opencv_world343.dll文件在同一个目录下面。或者cmakelists添加寻找opencv_world343.dll的绝对路径。否则则是报错如下。
Cmakelists具体内容如下:
cmake_minimum_required(VERSION 3.1)project(fill_test)set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})include_directories(${PROJECT_SOURCE_DIR}/../include)include_directories(${PROJECT_SOURCE_DIR}/../include/opencv)include_directories(${PROJECT_SOURCE_DIR}/../include/opencv2)link_directories(${PROJECT_SOURCE_DIR}/../lib)add_executable(fill_test complete_test.cc) //待测试主程序target_link_libraries(fill_test //链接库,主程序opencv_world343 fill_test需要链接的第三方库)
文件目录如下:
总文件:
Build
Example:
CMakeLists.txtcomplete_test.cc
2.bmp()
注:RelWithDebInfo生成文件将opencv_world343.dll放到生成的.exe同级目录下
Include:
Opencv(原生,可复用)
Opencv2(原生,可复用)
Lib:
Opencv_world343.lib(可复用)
Opencv_world343d.lib(可复用)
其他lib
比如:deptrum_depth.lib内含接口文件
补充:
今日增加AE封装接口 ,通过cnake调用,对该工程有进一步认识。
总体的调用架构如下:
cmakelists调用,3rdparty种Dependencies.cmake,然后Dependencies.cmake部分调用各个调用库对应的FindBoost.cmake,FindEigen3.cmake,FindOpenCV.cmake。这样整个架构就很显然类似与一个三级目录cmakelist——》Dependencies.cmake——》FindOpenCV.cmake(一类)。
其次,类的调用可以像下面这样写:
add_library(AE STATIC //名称 生成库类型
automatic_exposure.h
automatic_exposure.cc
)
将接口编译成静态库AE,然后将生成的静态库AE链接到对应的需要的主函数deptrum_camera中,
#link_libraries(deptrum_camera_static)
if (MSVC)
target_link_libraries(${targetname}
deptrum_camera
AE
${OpenCV_LIBS}
${Zlib_LIBS}
loguru
visualizer
)
全部camkelists如下:
cmake_minimum_required(VERSION 3.10)
# deptrum_camera_test
include_directories(..)
include_directories(include)
include_directories(${Deptrum_SOURCE_DIR}/base)
add_library(AE STATIC
automatic_exposure.h
automatic_exposure.cc
)
#add_library(AE STATIC
#AutomaticExposure.h
#AutomaticExposure.cpp
#)
function(add_test_case targetname srcs) //function函数(名称 形参 )
add_executable(${targetname} ${srcs})
link_directories(${targetname} BEFORE
PRIVATE ${OpenCV_SHARED_LIBRARY_DIRS}
)
#link_libraries(deptrum_camera_static)
if (MSVC) //MSVC表示windows系统
target_link_libraries(${targetname}
deptrum_camera
AE
${OpenCV_LIBS}
${Zlib_LIBS}
loguru
visualizer
)
endif()
if(${SYSTEM_PLATFORM} STREQUAL "linux-aarch64")
target_link_libraries(${targetname}
X11
)
add_definitions(-D BUILD_WITH_X11)
endif()
set_target_properties(${targetname} PROPERTIES FOLDER "camera-demo-test")
endfunction()
add_test_case(deptrum_camera_tof_test tof_main.cc)
add_test_case(deptrum_camera_thinman_mini_test thinman_mini_main.cc)
add_test_case(deptrum_camera_fatman_mini_test fatman_mini_main.cc)
ISP 【一】————boost标准库使用——批量读取保存文件 /boost第三方库的使用及其cmake添加,图像gramma相关推荐
- json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?
本期的主题是利用Python来实现对视频文件时间长度的读取. 在学习编程语言时,相比较于通过书本来学习知识,我更喜欢通过观看学习视频的方式来进行学习,通过主讲老师的讲解,我能很直观且快速的了解一些知识 ...
- Python常用小技巧(五)——批量读取json文件
Python常用小技巧(五)--批量读取json文件 前言:其实Python能够批量读取很多文件,这里,本人以json文件为例(json是标注图片时生成的文件,记录有标注的坐标和标签,友情推荐标注图片 ...
- python 批量读取csv_Python Pandas批量读取csv文件到dataframe的方法
PYTHON Pandas批量读取csv文件到DATAFRAME 首先使用glob.glob获得文件路径.然后定义一个列表,读取文件后再使用concat合并读取到的数据. #读取数据 import p ...
- python 批量读取csv 文件到dataframe_python 批量读取csv_Python Pandas批量读取csv文件到dataframe的方法...
PYTHON Pandas批量读取csv文件到DATAFRAME 首先使用glob.glob获得文件路径.然后定义一个列表,读取文件后再使用concat合并读取到的数据. #读取数据 import p ...
- python批量读取csv文件-Python读取/批量读取文件
相信很多人的日常工作中,数据源除了来自数据库以外,其次就是外部文件,因此掌握读取文件的技能是相当必要的.在这里特此整理读取外部文件的方法,希望能有助你们快速解决问题.当然本文对读者的假设是有一定的py ...
- python导入txt为dataframe-python批量读取txt文件为DataFrame的方法
我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...
- python读取txt为dataframe_python批量读取txt文件为DataFrame的方法
我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...
- python读取所有txt文件_python如何批量读取txt文件
python批量读取txt文件的方法:首先导入系统模块:然后将文件夹路径更改为需要批量读取的txt文件存放的路径:再调用系统模块得到该文件夹下的所有文件名称:最后遍历文件夹,读取txt文件. 如果文件 ...
- matlab读txt文件不完整,求助Matlab批量读取TXT文件出错
我用dlmread函数批量读取txt文件中的一个数据,但运行结果1.txt文件中只有一个数据0,调试时报错:错误使用 dlmread (line 147) 文件结尾不支持空的格式字符串,文件有128列 ...
最新文章
- 带有128KB缓存的AD7606模拟采集板
- Python运行方式
- JZOJ 3596. 【CQOI2014】和谐矩阵
- wxWidgets:wxGenericAboutDialog类用法
- C函数数组元素初始化
- 【主题演讲】探索云、视频会议,编解码的奥妙
- matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方法 (1)
- python路径拼接os.path.join()函数完全教程_详解python路径拼接os.path.join()函数的用法...
- Spring mvc+ maven + MyBatis + Oracle + IDEA 项目搭建 - framework 进阶中(一)
- oracle/PL/SQL编程(4)
- 矩池云上安装AlphaFold教程
- vue组件双向绑定.sync修饰符的一个坑
- 项目组网技术方案实施要点
- Linux网络——配置网络之iproute家族命令
- c语言word类型的题库,可下载c语言上机题库word版
- mmd动作:Fukayomi
- 谷歌Chrome浏览器保存网页为PDF
- iOS中播放音乐和音效
- 如何将本地文件上传到Gitlab中?
- SSRF利用 Gopher |Gopher攻击mysql及内网
热门文章
- mysql 表引擎无法更新_Mysql安装archive引擎更新表引擎
- 单片机彩灯移动实验_用S7-1200 PLC实现循环彩灯的控制,含源程序
- 设计一个扩展自抽象类geometricobject的新的triangle类_C++ 接口(抽象类)
- python搭积木_从零实现”搭积木式实现策略“的回测系统 part VI
- centos 配置bond_Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
- python数据去噪声_Logreduce:用Python和机器学习去除日志噪音
- 链表倒数第k个节点_面试题 02.02. 返回倒数第 k 个节点
- 使用Python,OpenCV进行平滑和模糊
- 使用OpenCV,Python和dlib进行眨眼检测及计数
- lasTools laszip.exe 点云las/laz的无损压缩/解压缩工具