Включение внешнего файла cpp в код OpenCV cpp

Я работаю над набором инструментов обработки изображений, который связывает OpenCV с Scilab, так что функции OpenCV могут использоваться непосредственно в Scilab. Теперь моя проблема в том, что у меня есть много функций, которые используются во всех других кодах, поэтому я решил включить их во внешний файл cpp и включить их в другие мои коды. Я сделал заголовочный файл common.h с определениями функций. common.c содержит реальные записанные функции. И все мои другие файлы, например, opencv_imcrop, имеют #include «common.h» вместе с другими включенными заголовочными файлами. Однако, когда я компилирую это в Scilab, используя мой файл шлюза для сборки (файл .sce, который компилирует мой opencv_imcrop.cpp), он выдает следующую ошибку:

opencv_imcrop.cpp: 14: 22: фатальная ошибка: common.h: нет такого файла или каталога
компиляция прекращена.

Это мой файл common.h:

#include "common.cpp"
string type2str(int type);
int no_of_channels(int type);
int retrieveImage(Mat &image);
int returnImage(char *checker,int &temp,Mat img);

Это мой файл common.cpp: —

string type2str(int type)
{
string r;
uchar depth = type & CV_MAT_DEPTH_MASK;
switch ( depth )
{
case CV_8U:  r = "8U"; break;
case CV_8S:  r = "8S"; break;
case CV_16U: r = "16U"; break;
case CV_16S: r = "16S"; break;
case CV_32S: r = "32S"; break;
case CV_32F: r = "32F"; break;
case CV_64F: r = "64F"; break;
default:     r = "User"; break;
}
return r;
}

int no_of_channels(int type)
{
uchar chans = 1 + (type >> CV_CN_SHIFT);
return chans;
}
//Note : the other 2 functions are also present here, but they
// comprise of 800 lines of code, so i did not paste them here

Файл opencv_imcrop.cpp (файл, который должен включать в себя указанный выше заголовочный файл для использования функций):

#include <numeric>
#include "opencv2/core/core.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/opencv.hpp"#include <iostream>
using namespace cv;
using namespace std;
extern "C"{
#include "api_scilab.h"#include "Scierror.h"#include "BOOL.h"#include <localization.h>
#include "common.h"
int opencv_imcrop(char *fname, unsigned long fname_len)
{

SciErr sciErr;
int iRows=0,iCols=0;
int *piAddr = NULL;
int *piAddrNew = NULL;
int *piAddr2  = NULL;
int *piAddr3  = NULL;
int *piAddr4  = NULL;
int *piAddr5  = NULL;
unsigned char *pstDataR = NULL;
unsigned char *pstDataG = NULL;
unsigned char *pstDataB = NULL;
int i,j,k;
double *x,*y,*width,*height;

//checking input argument
CheckInputArgument(pvApiCtx, 5, 5);
CheckOutputArgument(pvApiCtx, 1, 1) ;

Mat image;
retrieveImage(image);

//for value of top-left x-coordinate
sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
sciErr = getMatrixOfDouble(pvApiCtx, piAddr2, &iRows, &iCols ,&x);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}

//for value top-left y-coordinate
sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
sciErr = getMatrixOfDouble(pvApiCtx, piAddr3, &iRows, &iCols ,&y);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}

//for value of width
sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
sciErr = getMatrixOfDouble(pvApiCtx, piAddr4, &iRows, &iCols ,&width);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}

//for value of height
sciErr = getVarAddressFromPosition(pvApiCtx,5,&piAddr5);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
sciErr = getMatrixOfDouble(pvApiCtx, piAddr5, &iRows, &iCols ,&height);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}

//defining a temporary rectangle, that denotes the area that has to be cropped into the new image
Rect myROI(x[0], y[0], width[0], height[0]);

// Crop the full image to that image contained by the rectangle myROI
// Note that this doesn't copy the data
Mat croppedRef(image, myROI);

Mat cropped;
// Copy the data into new matrix
croppedRef.copyTo(cropped);

int temp = nbInputArgument(pvApiCtx) + 1;
string tempstring = type2str(cropped.type());
char *checker;
checker = (char *)malloc(tempstring.size() + 1);
memcpy(checker, tempstring.c_str(), tempstring.size() + 1);
returnImage(checker,temp,cropped);

//Assigning the list as the Output Variable
AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
//Returning the Output Variables as arguments to the Scilab environment
ReturnArguments(pvApiCtx);
return 0;

}
/* ==================================================================== */
}

И, наконец, файл .sce (builder_gateway_cpp.sce), который я запускаю в scilab для компиляции вышеуказанного файла cpp, выглядит следующим образом:

function builder_gw_cpp()
WITHOUT_AUTO_PUTLHSVAR = %t;
tbx_build_gateway("skeleton_cpp69690", ..
["imcrop","opencv_imcrop"], ..
["opencv_imcrop.cpp"], ..get_absolute_file_path("builder_gateway_cpp.sce"),[],"g++ -ggdb
`pkg-config --cflags opencv` -o `basename opencv_imcrop.cpp .cpp`
opencv_imcrop.cpp `pkg-config --libs opencv`");

endfunction

builder_gw_cpp();
clear builder_gw_cpp; // remove builder_gw_cpp on stack

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]