我决定重新表述这个问题。以下是问题所在:
我通过调用: system("/usr/local/bin/textcleaner -e正常化-f 25 -o 10 path to infile“)在c++程序中运行了-f;
但现在我发现了一个错误:
/usr/local/bin/textcleaner:第389行:转换:命令未找到
/usr/local/bin/textcleaner:第400行:[::预期的整数表达式
/usr/local/bin/textcleaner:第403行:转换:未找到命令
/usr/local/bin/textcleaner:第417行:[::预期的整数表达式
/usr/local/bin/textcleaner:第423行:[::预期的整数表达式
/usr/local/bin/textcleaner:第429行:转换:未找到命令
--文件/用户/~/桌面/kimlik/kimlik1.bmp不可读或为零大小--
那么这里有什么问题呢?我用正确的路径给出了一个正确的图像,所以我认为问题不是最后一行,而是textcleaner.exe中的转换命令。如何同时调用textcleaner.exe和convert.exe,即在运行textcleaner.exe时,它知道是什么命令?
发布于 2017-03-01 14:42:13
我不建议从C++应用程序调用外部脚本。您需要考虑路径、加载shell环境和外部错误处理。不是很难做,但我觉得没必要。我认为如果您开发一个C++解决方案,而不是直接与Magick++集成。试试下面的..。
确保您安装了带有ImageMagick支持的Magick++。默认情况下,这通常是启用的。
更新Xcode的构建设置以包含Magick++标志。
Magick++-config --cxxflags
。返回值应在“其他C++标志”选项下复制。Magick++-config --libs
。返回值应在“其他链接器标志”选项下复制。Xcode项目现在应该支持Magick++库。
最后,评估弗雷德出色的textcleaner
脚本的来源。您应该能够在C++中直接模仿他的技术。
例如。脚本可以生成以下转换命令。
convert \( $infile -colorspace gray -type grayscale -contrast-stretch 0 \) \
\( -clone 0 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 \) \
-compose copy_opacity -composite -fill "$bgcolor" -opaque none \
-sharpen 0x1 \ $outfile
可以用类似于..。
#include <Magick++.h>
using namespace Magick;
int main(int argc, const char * argv[]) {
long
filtersize = 15,
offest = 5;
const char
* bgcolor = "white",
* infile = "wizard:",
* outfile = "output.png";
InitializeMagick(argv[0]);
Image alphaImage(infile);
alphaImage.colorSpaceType(GRAYColorspace);
alphaImage.type(GrayscaleType);
alphaImage.contrastStretch(0, QuantumRange);
Image betaImage(alphaImage);
betaImage.negate();
betaImage.adaptiveThreshold(filtersize, filtersize, offest);
betaImage.contrastStretch(0, QuantumRange);
alphaImage.composite(betaImage, 0, 0, CopyAlphaCompositeOp);
alphaImage.fillColor(Color(bgcolor));
alphaImage.opaque(Color("none"), Color(bgcolor));
alphaImage.sharpen();
alphaImage.write(outfile);
return 0;
}
https://stackoverflow.com/questions/42530995
复制相似问题