日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ISP 【一】————boost标准库使用——批量读取保存文件 /boost第三方库的使用及其cmake添加,图像gramma

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)
?

總結

以上是生活随笔為你收集整理的ISP 【一】————boost标准库使用——批量读取保存文件 /boost第三方库的使用及其cmake添加,图像gramma的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。