我正在使用Tesseract从图像中提取文本(OCR)。这工作正常。
以前我正在解析从C#到我的C ++ DLL的文件名(DLL处理OCR部分)。
现在我想优化进程并解析目录并返回每个图像的文本数组。
我想返回一个包含以下内容的数组:
[0] =文件1文字 [1] =文件2文本
这是我目前的代码:
char** OCRWrapper::ReadAllPages(char* path, char* lang, char* imgPath)
{
std::vector<char*> charArr;
DIR* pDirectory;
struct dirent *entry;
if (pDirectory = opendir(imgPath))
{
std::string imgPathString = imgPath;
std::vector<int> fileNames;
while (entry = readdir(pDirectory))
{
std::string fullPath = imgPathString + "\\" + entry->d_name;
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0)
{
std::string filename = entry->d_name;
filename = filename.replace(filename.find("."), 1, "");
filename = filename.replace(filename.find("p"), 1, "");
filename = filename.replace(filename.find("n"), 1, "");
filename = filename.replace(filename.find("g"), 1, "");
fileNames.push_back(atoi(filename.c_str()));
}
}
closedir(pDirectory);
std::sort(fileNames.begin(), fileNames.end());
for (int i = 0; i < fileNames.size(); i++)
{
std::string fullFileName = imgPathString + "\\" + std::to_string(fileNames[i]) + ".png";
char* pFileText = GetUTF8Text(path, lang, &fullFileName[0]);
if (pFileText == NULL)
{
pFileText = "";
}
charArr.push_back(pFileText);
}
}
//What do I do here??? I need to convert charArr to an char* array and return the text for each index.
char** p = charArr.data();
return p;
}
char** p = charArr.data() //only returns the first value in the array.
希望它有意义。
我需要将数组解析为C#。
谢谢。
答案 0 :(得分:0)
根据我的理解,您应首先为p
分配内存,然后将charArr
的每个值复制到p
。
或者,如果您确定charArr
的大小,我认为您的。{
char** p = charArr.data();
应该做到这一点。
我不明白你的意思
//仅返回数组中的第一个值。
您是否在p
上进行了迭代?
对不起,如果我没有正确理解。
编辑::试试这个:
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<char*> v;
v.push_back("Hello");
v.push_back("my");
v.push_back("Friend");
v.push_back("!");
std::for_each (v.begin(), v.end(), [&](char* value)
{
std::cout << value << std::endl;
});
char** v_ptr = v.data();
for (int i = 0; i < v.size(); i++)
{
std::cout << v_ptr[i] << std::endl;
}
return 0;
}