From b67dd164d84dbc68aac39fd1a1b1ba23aedb708c Mon Sep 17 00:00:00 2001 From: cuixing158 <1229261804@qq.com> Date: Sat, 12 Aug 2023 11:51:43 +0800 Subject: [PATCH] first commit --- OpenCV_API.m | 76 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 40 ++++++++++++++++++++++++ images/logo.PNG | Bin 0 -> 54078 bytes imread_opencv.m | 37 ++++++++++++++++++++++ opencvAPI.cpp | 29 +++++++++++++++++ opencvAPI.h | 22 +++++++++++++ test_480x640x3.jpg | Bin 0 -> 31702 bytes 7 files changed, 204 insertions(+) create mode 100644 OpenCV_API.m create mode 100644 README.md create mode 100644 images/logo.PNG create mode 100644 imread_opencv.m create mode 100644 opencvAPI.cpp create mode 100644 opencvAPI.h create mode 100644 test_480x640x3.jpg diff --git a/OpenCV_API.m b/OpenCV_API.m new file mode 100644 index 0000000..148e405 --- /dev/null +++ b/OpenCV_API.m @@ -0,0 +1,76 @@ +%================================================================ +% This class abstracts the API to an external OpenCV library. +% It implements static methods for updating the build information +% at compile time and build time. + +classdef OpenCV_API < coder.ExternalDependency + %#codegen + + methods (Static) + + function bName = getDescriptiveName(~) + bName = 'OpenCV_API'; + end + + function tf = isSupportedContext(buildContext) + myTarget = {'mex','rtw'};% 验证代码生成目标为mex或者dll,lib,exe + if buildContext.isCodeGenTarget(myTarget) + tf = true; + else + error('OpenCV_API only supported for mex, lib, exe, dll'); + end + + % hw = buildContext.getHardwareImplementation(); + + end + + function updateBuildInfo(buildInfo, buildContext) + % 输入buildInfo请参考:RTW.BuildInfo + % 输入buildContext请参考:coder.BuildConfig class + % + % Get file extensions for the current platform + % [~, linkLibExt, execLibExt, ~] = buildContext.getStdLibInfo(); + + % Code to run on Linux platform + includeFilePath = fullfile("E:\opencv4_4_0\opencv\MinGW64_v8_OpenCV4_4_Contrib_install\include"); + buildInfo.addIncludePaths(includeFilePath); + + % Link files + libPath = fullfile("E:\opencv4_4_0\opencv\MinGW64_v8_OpenCV4_4_Contrib_install\x64\mingw\lib"); + linkFiles = "libopencv_world440.dll.a"; + linkPath = libPath; + linkPriority = ""; + linkPrecompiled = true; + linkLinkOnly = true; + group = ''; + buildInfo.addLinkObjects(linkFiles, linkPath, ... + linkPriority, linkPrecompiled, linkLinkOnly, group); + + % include and source path +% buildInfo.addIncludePaths("./"); +% buildInfo.addSourcePaths("./"); + end + + %API for library function 'imread' + function outImg = imread(imagePath) + arguments + imagePath (1,1) string + end + + outImg = coder.nullcopy(zeros(480,640,3,"uint8")); + if coder.target('MATLAB') + % running in MATLAB, use built-in addition + outImg = imread_opencv_mex(imagePath); + else + % Add the required include statements to the generated function code + coder.cinclude('opencvAPI.h'); + % include external C++ functions + coder.updateBuildInfo('addSourceFiles', "opencvAPI.cpp"); + + % 调用OpenCV C++代码包装器 + imgPath = [char(imagePath),0]; + coder.ceval('imreadOpenCV', coder.rref(imgPath),coder.wref(outImg)); + end + end + end +end \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..85e8a92 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# MATLAB MEX file For C/C++ code generation + +![logo](images/logo.PNG) + +## OverView + +In order to call external C/C++ library functions, it is generally recommended to use the [mex](https://ww2.mathworks.cn/help/matlab/ref/mex.html) built-in function to compile the source code into a mex executable file, but the disadvantage is that it is not easy to generate C/C++ code in turn if there are other matlab code mixed in. This example is just to show how to use [codegen](https://ww2.mathworks.cn/help/coder/ref/codegen.html) two-way through this process, not limited to the example itself, is a general method, another advantage is not limited to the code generation of various restrictions, fully integrated with C/C++ programming. + +## Requirements + +- MATLAB +- Matlab Coder toolbox +- [Supported and Compatible Compilers](https://ww2.mathworks.cn/en/support/requirements/supported-compilers.html) +- Your External C/C++ Library(This example uses OpenCV as an example) + +## How to setup + +### 1.Configuring the compiler + +In the command window,configure your complier. + +```matlab +mex -setup C++ +``` + +### 2.Source Code Preparation + +Prepare your C/C++ code and MATLAB entry-point function.Prepare the implementation of the `updateBuildInfo(buildInfo, buildContext)` member function, rewritten according to the path of the external library. (header files and library files). + +### 3.Generate or Compile + +Generate or compile the files you want with the `codegen` command. +For example: + +```matlab +imagePath = "./test_480x640x3.jpg"; +input1 = coder.typeof(imagePath); +input1.StringLength=inf; +codegen -config:mex imread_opencv -args {input1} -lang:c++ -report +``` diff --git a/images/logo.PNG b/images/logo.PNG new file mode 100644 index 0000000000000000000000000000000000000000..541596876ca7e855e0b93b7e8c490258cca031a8 GIT binary patch literal 54078 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 F-dDxWRRFp{sKZ22_y2FvUwehw*(wNRQ51w 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 literal 0 HcmV?d00001 diff --git a/imread_opencv.m b/imread_opencv.m new file mode 100644 index 0000000..21ba8a7 --- /dev/null +++ b/imread_opencv.m @@ -0,0 +1,37 @@ +function outImg = imread_opencv(imagePath)%#codegen +% Brief: Write a function imreadOpencv that calls the external library function. +% Details: +% Read a uint8 image of size 480*640 +% +% Syntax: +% outImg = imread_opencv(imagePath) +% +% Inputs: +% imagePath - [1,1] size,[string] type,image path +% +% Outputs: +% outImg - [480,640] size,[uint8] type,Description +% +% codegen command: +% imagePath = "./test_480x640_uint8.jpg"; +% input1 = coder.typeof(imagePath); +% input1.StringLength=inf; +% +% codegen -config:mex imread_opencv -args {input1} -lang:c++ -report +% +% Usage Example: +% imagePath = "./test_480x640_uint8.jpg"; +% result = imread_opencv(imagePath); +% +% +% Example: +% None +% +% See also: None + + +arguments + imagePath (1,1) string +end +outImg = OpenCV_API.imread(imagePath); +end \ No newline at end of file diff --git a/opencvAPI.cpp b/opencvAPI.cpp new file mode 100644 index 0000000..81a2d67 --- /dev/null +++ b/opencvAPI.cpp @@ -0,0 +1,29 @@ +#include "opencvAPI.h" + +// 对应OpenCV的cv::Mat转MATLAB uint8类型或logical图像 +void convertCVToMatrix(cv::Mat &srcImg, int rows, int cols, int channels, unsigned char dst[]) { + CV_Assert(srcImg.type() == CV_8UC1 || srcImg.type() == CV_8UC3); + size_t elems = rows * cols; + if (channels == 3) { + cv::Mat channels[3]; + cv::split(srcImg.t(), channels); + + memcpy(dst, channels[2].data, elems * sizeof(unsigned char)); //copy channel[2] to the red channel + memcpy(dst + elems, channels[1].data, elems * sizeof(unsigned char)); // green + memcpy(dst + 2 * elems, channels[0].data, elems * sizeof(unsigned char)); // blue + } else { + srcImg = srcImg.t(); + memcpy(dst, srcImg.data, elems * sizeof(unsigned char)); + } +} + + +void imreadOpenCV(const char *imagePath, unsigned char outImg[]) { + std::string imgPath(imagePath); + cv::Mat srcImg = cv::imread(imgPath, cv::IMREAD_COLOR); + if (srcImg.empty()) { + std::runtime_error("read image is empty!"); + } + + convertCVToMatrix(srcImg, srcImg.rows, srcImg.cols, srcImg.channels(), outImg); +} diff --git a/opencvAPI.h b/opencvAPI.h new file mode 100644 index 0000000..0560cdc --- /dev/null +++ b/opencvAPI.h @@ -0,0 +1,22 @@ + +#ifndef _OPENCVAPI_ALLPLATFORM_ +#define _OPENCVAPI_ALLPLATFORM_ + +// base +#include +#include +#include +#include + +// OpenCV +#include +#include +#include + + +// "marshalling" +void convertCVToMatrix(cv::Mat &srcImg, int rows, int cols, int channels, unsigned char dst[]); + +void imreadOpenCV(const char *imagePath, unsigned char outImg[]); + +#endif \ No newline at end of file diff --git a/test_480x640x3.jpg b/test_480x640x3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57eeac32dcf07892239a6d08bb327fc4b227d26d GIT binary patch literal 31702 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