使用时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
?的任何简便方法?
poppler的单声道图像是每个像素1位,而opencv的是每个像素1个字节。