当前位置: 首页 > 编程日记 > 正文

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.txt

complete_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)

相关文章:

简单ajax类, 比较小, 只用ajax功能时, 可以考虑它

忘了哪儿转来的了, 不时的能够用上, 留存一下<script language"javascript" type"text/javascript"> /***var ajaxAjax();/*get使用方式* /ajax.get("php_server.php?id1&namexxx", function(data){ alert(data); //d…

Hadoop 三大发行版本

Hadoop三大发行版本&#xff1a;Apache、Cloudera、Hortonworks。 Apache版本最原始&#xff08;最基础&#xff09;的版本&#xff0c;对于入门学习最好。 Cloudera在大型互联网企业中用的较多。 Hortonworks文档较好。 1. Apache Hadoop 官网地址&#xff1a;http://had…

MongoDB主动撤回SSPL的开源许可申请

2018年10月&#xff0c;MongoDB将其开源协议更换为SSPL&#xff0c;虽然在当时引起了很大的争议&#xff0c;但是MongoDB始终坚信SSPL符合符合开源计划的批准标准&#xff0c;并向Open Source Initiative &#xff08;以下简称OSI&#xff09;提交了申请。不过&#xff0c;近日…

MATLAB【八】———— matlab 读取单个(多个)文件夹中所有图像

0.matlab 移动&#xff08;复制&#xff09;文件到另一个文件夹 sourcePath .\Square_train; targetPath .\Square_test; fileList dir(sourcePath); for k 3 :5: length(fileList) movefile([sourcePath,\,fileList(k).name],targetPath); end %copyfile([sourcePat…

JAVA IO学习

2019独角兽企业重金招聘Python工程师标准>>> 很多初学者接触IO时&#xff0c;总是感觉东西太多&#xff0c;杂乱的分不清楚。其实里面用到了装饰器模式封装&#xff0c;把里面的接口梳理一下之后&#xff0c;就会觉得其实蛮清晰的 相关的接口和类 接口或类描述Input…

Java面向对象三大特征 之 多态性

1、理解多态性&#xff1a;可以理解为一个事物的多种形态 2、对象的多态性&#xff1a;父类的引用指向子类的对象&#xff08;子类的对象赋给父类的引用&#xff09; 3、多态的使用&#xff1a;虚拟方法的调用 子类中定义了与父类同名同参数的方法&#xff08;重写&#xff…

Bootstrap3基础 btn-group-vertical 按钮组(横着、竖着排列)

内容参数OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor Visual Studio Code 1.32.1 typesetting Markdowncode <!DOCTYPE html> <html lang"zh-CN"><head><meta charset&quo…

ISP【二】————camera ir图

1. 加串解串芯片作用&#xff1f; A: 加串和解串是成对出现的&#xff0c;串行器在模组内&#xff0c;将并行信号转换为串行信号&#xff0c;然后用一根线可以实现远距离传输。sensor输出的raw data如果不加串&#xff0c;需要&#xff18;根线传输&#xff0c;很难传输很远&a…

Hadoop运行模式 之 本地运行模式

Hadoop的运行模式包括&#xff1a;本地模式、伪分布式模式以及完全分布式模式 Hadoop官网地址&#xff1a;https://hadoop.apache.org/ 本次使用的Hadoop的版本是2.7.2 官网文档&#xff1a;https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/Single…

一些使用Vim的小技巧

7.增加注释&#xff08;一个操作应用在多行&#xff09;比如需要增加#或者是//这种注释&#xff1a;Ctrl v 定位到开始行&#xff0c;然后选定需要的行&#xff0c;然后执行 I命令&#xff0c;然后输入 # 或 //&#xff0c;然后按 Esc键两次&#xff0c;即可把注释操作应用到所…

SpringBoot注解大全 转

2019年3月17日22:30:10 一、注解(annotations)列表 SpringBootApplication&#xff1a;包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。 Configuration 等同于spring的XML配置…

MATLAB【九】————ICP算法实现

1.ICP推导与求解 https://zhuanlan.zhihu.com/p/35893884 2.算法实现&#xff1a; % 程序说明&#xff1a;输入data_source和data_target两个点云&#xff0c;找寻将data_source映射到data_targe的旋转和平移参数 clear; close all; clc; %% 参数配置 kd 1; inlier_ratio …

Centos 7环境下源码安装PostgreSQL数据库

马上就要去实习了&#xff0c;工作内容是搞数据仓库方面的&#xff0c;用的是postgresql关系型数据库&#xff0c;于是自己先来了解下这种数据的用法&#xff0c;之后说说这个数据库和MySQL的关系和区别。 1.Postgresql简介 看了下官网上的介绍&#xff0c;全球最高级的开源关系…

Oracle job procedure 存储过程定时任务

Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能&#xff0c;可以在指定的时间点或每天的某个时间点自行执行任务。 一、查询系统中的job&#xff0c;可以查询视图 --相关视图 select * from dba_jobs; select * from all_jobs; select * from user_jobs; -…

Hadoop运行模式 之 伪分布式运行模式

什么是伪分布式模式&#xff1f;它与本地运行模式以及完全分布式模式有什么区别&#xff1f; 伪分布式的配置信息&#xff0c;完全是按照完全分布式的模式去搭建的&#xff0c;但是它只有一台服务器&#xff0c;可以用于学习和测试&#xff0c;真正的开发中不可以使用。 目录…

【C++】【一】结构体数组

demo7:函数份文件编写 swap.h #include <iostream> using namespace std;//函数的声明 void swap(int a, int b); swap.cpp #include "swap.h"//函数的定义 void swap(int a, int b) {int temp a;a b;b temp;cout << "a " << a …

Message、Handler、Message Queue、Looper之间的关系

2019独角兽企业重金招聘Python工程师标准>>> 在单线程模型下&#xff0c;为了解决线程通信问题&#xff0c;Android设计了一个通信机制。Message Queue(消息队列)&#xff0c; 线程间的通信可以通过Message Queue、Handler和Looper进行信息交换。下面将对它们进行逐…

在linux中只将“桌面”修改成“Desktop”而系统仍然使用中文

在安装好centos系统以后&#xff0c;它的Desktop&#xff0c;Downloads等文件夹都是中文的&#xff0c;桌面&#xff0c;下载等&#xff0c;这样在使用cd命令时特别不方便 解决方法一&#xff1a;下载一个中文输入法&#xff0c;安装 解决方法二&#xff1a; 修改il8n文件&a…

Zabbix 3.0 从入门到精通(zabbix使用详解)

第1章 zabbix监控 1.1 为什么要监控 在需要的时刻&#xff0c;提前提醒我们服务器出问题了 当出问题之后&#xff0c;可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性&#xff08;也称为可用性&#xff0c;英文描述为HA&#xff0c;High Avail…

MacBook如何用Parallels Desktop安装windows7/8

虽然MacBook真的很好用&#xff0c;不过在天朝的国情下&#xff0c;有很多软件还是仅支持IE和windows系统下才有。所以有必要为自己的MacBook装一个windows版本的系统&#xff0c;之前试过用Boot Camp来建立分区和安装win7&#xff0c;之后自己又用Parallels Desktop安装过win8…

在IDEA 中为Maven 配置阿里云镜像源

打开IntelliJ IDEA->Settings ->Build, Execution, Deployment -> Build Tools > Maven 注意要勾选上override 自己创建一个settings.xml文件&#xff0c; 内容如下 <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http:/…

【匹配算法】渐进一致采样 PROSAC(PROgressive SAmple Consensus)

方法简介 渐进一致采样法1 (PROSAC) 是对经典的 RANSAC2 中采样的一种优化。相比经典的 RANSAC 方法均匀地从整个集合中采样&#xff0c;PROSAC 方法是从不断增大的最佳对应点集合中进行采样的。所以这种方法可以节省计算量&#xff0c;提高运行速度。 论文&#xff1a;https:…

阿里巴巴开源的 Blink 实时计算框架真香

Blink 开源了有一段时间了&#xff0c;竟然没发现有人写相关的博客&#xff0c;其实我已经在我的知识星球里开始写了&#xff0c;今天来看看 Blink 为什么香&#xff1f; 我们先看看 Blink 黑色版本&#xff1a; 对比下 Flink 版本你就知道黑色版本多好看了。 你上传 jar 包的时…

【地图API】收货地址详解2

上次讲解的方法是&#xff1a; 在地图中心点添加一个标注&#xff0c;每次拖动地图就获取地图中心点&#xff0c;再把标注的位置设置为地图中心点。可参考教程&#xff1a;http://www.cnblogs.com/milkmap/p/6126424.html 可能有开发者觉得&#xff0c;这个算法会有“延时”&am…

MATLAB【十三】————仿真函数记录以及matlab变成小结

part one&#xff1a;matlab 编程小结。 1.char 与string的区别&#xff0c;char使用的单引号 ‘’ &#xff0c;string使用的是双引号“”。 2.一般标题中的输出一定要通过 num2str 处理&#xff0c;画图具体的图像细节参考&#xff1a;https://blog.csdn.net/Darlingqiang/ar…

IDEA HDFS客户端准备

在此之前&#xff1a;先进行在IDEA 中为Maven 配置阿里云镜像源 1、将资料包中的压缩包解压到一个没有中文的目录下 2、配置HADOOP_HOME环境变量 3、配置Path环境变量 4、创建一个Maven工程HDFSClientDemo 5、在pom.xml中添加依赖 <dependencies><dependency><g…

12 Java面向对象之多态

JavaSE 基础之十二12 Java面向对象之多态 ① 多态的概念及分类 多态的概念&#xff1a;对象的多种表现形式和能力多态的分类  1. 静态多态&#xff1a;在编译期间&#xff0c;程序就能决定调用哪个方法。方法的重载就表现出了静态多态。  2. 动态多态&#xff1a;在程序运行…

MATLAB【十四】————遍历三层文件夹操作

文件夹遍历 clear; clc; close all;%% crop the im into 256*256 num 0; %% num1 内缩3个像素 num 2 内缩6个像素 load(qualitydata1.mat) load(qualitydata2.mat)[data1_m,data1_n] size(qualitydata1); [data2_m,data2_n] size(qualitydata2);%% read image_name …

LoadRunner监控Linux

有的linux机器上安装rpc后会保存如下&#xff1a; test -z "/usr/local/sbin" || mkdir -p -- . "/usr/local/sbin"/bin/install -c rpc.rstatd /usr/local/sbin/rpc.rstatd make[2]: Nothing to be done for install-data-am. make[2]: Leaving directory…

scala while循环中断

Scala内置控制结构特地去掉了break和continue&#xff0c;是为了更好的适应函数化编程&#xff0c;推荐使用函数式的风格解决break和contine的功能&#xff0c;而不是一个关键字。 如何实现continue的效果 Scala内置控制结构特地也去掉了continue&#xff0c;是为了更好的适应…