- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Leptonica 库处理一些图片。之后我想在我的 QT GUI 中显示它们。 Leptonica 使用他们自己的图像格式 Pix,而 QT 使用他们自己的格式 QPixmap。目前对我来说唯一的方法是将处理后的图片保存为文件(如 bmp ),然后使用 QT 函数调用再次加载它们。现在我想在我的代码中转换它们,所以我不需要绕道将它们保存在文件系统上。任何想法如何做到这一点?
最好的问候
//编辑:
好的,正如已经建议的那样,我尝试将 PIX* 转换为 QImage。PIX* 定义如下:
http://tpgit.github.com/Leptonica/pix_8h_source.html
struct Pix
{
l_uint32 w; /* width in pixels */
l_uint32 h; /* height in pixels */
l_uint32 d; /* depth in bits */
l_uint32 wpl; /* 32-bit words/line */
l_uint32 refcount; /* reference count (1 if no clones) */
l_int32 xres; /* image res (ppi) in x direction */
/* (use 0 if unknown) */
l_int32 yres; /* image res (ppi) in y direction */
/* (use 0 if unknown) */
l_int32 informat; /* input file format, IFF_* */
char *text; /* text string associated with pix */
struct PixColormap *colormap; /* colormap (may be null) */
l_uint32 *data; /* the image data */
};
虽然 QImage 为我提供了这样的方法:
http://developer.qt.nokia.com/doc/qt-4.8/qimage.html#QImage-7
QImage ( const uchar * data,
int width,
int height,
int bytesPerLine,
Format format )
我假设我不能在调用构造函数时将数据从 PIX 复制到 QImage。我想我需要逐个像素地填充 QImage,但实际上我不知道怎么做?我需要遍历所有坐标吗?我如何看待位深度?这里有什么想法吗?
最佳答案
I use这用于将 QImage 转换为 PIX:
PIX* TessTools::qImage2PIX(QImage& qImage) {
PIX * pixs;
l_uint32 *lines;
qImage = qImage.rgbSwapped();
int width = qImage.width();
int height = qImage.height();
int depth = qImage.depth();
int wpl = qImage.bytesPerLine() / 4;
pixs = pixCreate(width, height, depth);
pixSetWpl(pixs, wpl);
pixSetColormap(pixs, NULL);
l_uint32 *datas = pixs->data;
for (int y = 0; y < height; y++) {
lines = datas + y * wpl;
QByteArray a((const char*)qImage.scanLine(y), qImage.bytesPerLine());
for (int j = 0; j < a.size(); j++) {
*((l_uint8 *)lines + j) = a[j];
}
}
return pixEndianByteSwapNew(pixs);
}
这用于将 PIX 转换为 QImage:
QImage TessTools::PIX2QImage(PIX *pixImage) {
int width = pixGetWidth(pixImage);
int height = pixGetHeight(pixImage);
int depth = pixGetDepth(pixImage);
int bytesPerLine = pixGetWpl(pixImage) * 4;
l_uint32 * s_data = pixGetData(pixEndianByteSwapNew(pixImage));
QImage::Format format;
if (depth == 1)
format = QImage::Format_Mono;
else if (depth == 8)
format = QImage::Format_Indexed8;
else
format = QImage::Format_RGB32;
QImage result((uchar*)s_data, width, height, bytesPerLine, format);
// Handle pallete
QVector<QRgb> _bwCT;
_bwCT.append(qRgb(255,255,255));
_bwCT.append(qRgb(0,0,0));
QVector<QRgb> _grayscaleCT(256);
for (int i = 0; i < 256; i++) {
_grayscaleCT.append(qRgb(i, i, i));
}
if (depth == 1) {
result.setColorTable(_bwCT);
} else if (depth == 8) {
result.setColorTable(_grayscaleCT);
} else {
result.setColorTable(_grayscaleCT);
}
if (result.isNull()) {
static QImage none(0,0,QImage::Format_Invalid);
qDebug() << "***Invalid format!!!";
return none;
}
return result.rgbSwapped();
}
关于c++ - 将 Leptonica Pix 对象转换为 QPixmap(或其他图像对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655772/
当我尝试安装从他们的网站下载的构建 Leptonica 1.72 时:http://www.leptonica.com/download.html使用默认安装路径: ./configure make
我试图找到与蓝线和红线之间的区域相交的黑色像素连续区域的边界框(见下图)。 我已经使用 leptonica 库进行了非常简单的图像处理,并且我知道如何“手动”解决问题。但是,我认为 leptonica
我正在尝试编译然后执行 Leptonica 示例程序 colorquant_reg.c 事实: 操作系统:Ubuntu 位置: leptonlib-1.67/src/colorquant_reg.c
我正在尝试弄清楚如何使用 Leptonica 库提供的分段器进行文档分析。我一直在看 pageseg.c,但我不认为我完全理解它:(! 如果我拍摄图像并将其加载为 PIX 数据类型,我是否调用 pix
我试图在使用 leptonica 处理后将图像保存为 jpeg。我将 python 与 ctypes 一起使用,我的代码是: import ctypes leptlib = "liblept.so"
如何从像素中获取高度和宽度? Pix *image = pixRead((input).c_str()); 最佳答案 使用pixGetWidth和 pixGetHeight : Pix *image
我正在尝试使用 openFrameworks (0.9.0) 和 Xcode 7 构建一个 OSX OCR C++ 应用程序。 OCR 库是 Tesseract,它需要 Leptonica,我已经通过
我正在尝试做两件事 -> 首先,我需要读取图像并裁剪它(坐标/框架将由用户提供)。然后我想对其运行 OCR。 (实际上裁剪和OCR是要严格划分的)。现在我的问题是: 对于 OCR,我使用 Tesser
我在 Android 上面临与 Leptonica 库相同的问题 How to get skew angle from image我尝试了这两种方法 - 使用一个参数和六个参数,我尝试了多种组合。 F
我正在尝试将 Bitmap 转换为 Pix。然而,手动从 Bitmap 读取每个像素并在 Pix 中设置它太慢了。 Pix pix = new Pix(width, height, depth); f
我已经在 $HOME/local 中安装了 leptonica 和 tesseract,tesseract 工作正常,然后是 tesserocr python 包: CPPFLAGS="-I/home
我有一个关于 Leptonica 的有趣问题,我想知道其他 SO 成员是否已经看到了。 我正在进行去歪斜操作,并且存在严重的伪影问题,以至于没有人会正确地接受结果,这会降低图像质量而不是它们带来的好处
我有一个使用 leptonica 的小程序。但是我如何检查安装了哪个版本? #include 最佳答案 一切都在链接时完成。 如果您使用动态链接,您可以以依赖于编译器的方式指定要链接的库的版本。例如
我有一个 PIX 格式的图像,我也有一个 BOX[具有必要的坐标],我想在框中的内容周围画一个边框,例如 - 我查看了文档,但到目前为止我只发现了如何给整个图像加边框,而不仅仅是其中的一个矩形。 最佳
我正在尝试使用 tesseract OCR 扫描名片,我所做的只是在不进行预处理的情况下发送图像,这是我正在使用的代码。 Tesseract* tesseract = [[Tesseract all
我在 Android 上使用 Tesseract,我有以下代码来提取字符串和从图像中读取的框: TessBaseAPI baseApi = new TessBaseAPI(); baseApi.ini
我正在使用 Leptonica 库处理一些图片。之后我想在我的 QT GUI 中显示它们。 Leptonica 使用他们自己的图像格式 Pix,而 QT 使用他们自己的格式 QPixmap。目前对我来
我想知道应该使用什么函数来使用 Leptonica Image Processing 获取 Pix 类型图像的感兴趣区域图书馆。我已经在 OpenCV 中完成了这项工作,并且我想要它在 Leptoni
我有一个由 返回的 Leptonica Pix 对象 TessBaseApi.getThresholdedImage(); 现在,我如何将它转换为位图,以便我可以通过 ImageView 显示它。 l
我正在研究图像处理,并决定阅读颜色量化的工作原理,经过一番阅读后,我找到了 Modified Median Cut Quantization算法。 我一直在阅读 C implementation in
我是一名优秀的程序员,十分优秀!