Warm tip: This article is reproduced from serverfault.com, please click

其他-在poppler中使用灰色图像的数据构造opencv cv :: Mat时失败

(其他 - Failed when construct opencv cv::Mat using data of a gray image in poppler)

发布于 2020-11-26 09:21:48

使用时poppler::image::format_gray8,由于违反内存访问而崩溃

poppler::page * page = poppler_pdf_doc->create_page(page_index);
poppler::page_renderer page_render;
page_render.set_image_format(poppler::image::format_gray8);
poppler::image poppler_img = page_render.render_page(page, 120, 120);
cv::Mat(poppler_img.height(), poppler_img.width(), CV_8UC1, poppler_img.data(), poppler_img.bytes_per_row()).copyTo(__cv_mat_page);

但是使用poppler::image::format_rgb24,没关系

poppler::page * page = __poppler_pdf_doc->create_page(page_index);
poppler::page_renderer page_render;
page_render.set_image_format(poppler::image::format_rgb24);
poppler::image poppler_img = page_render.render_page(page, 120, 120);
cv::Mat(poppler_img.height(), poppler_img.width(), CV_8UC3, poppler_img.data(), poppler_img.bytes_per_row()).copyTo(__cv_mat_page);

为什么?

顺便说一句,将格式poppler::image::format_mono(每个像素1位)转换cv::Mat?的任何简便方法

Questioner
followait
Viewed
0
followait 2020-11-28 18:39:12

poppler的单声道图像是每个像素1位,而opencv的是每个像素1个字节。