設置PNG圖片DPI 信息,保存為PDF(使用Magick),與OpenCV轉換


任務描述

我有這樣一個需求,讀取一張格式為PNG 或者 Jpeg 的圖片, 保存為可以可以直接打印的大小,要求編為一個小程序。因為通常情況下圖像大小如1024*512 是像素尺寸,要想打印出來是需要設置 DPI(dots per inch),意思是每英寸上有多少個點(像素)。為了打印方便還可以保存為PDF。

解決方案

Magick++

Magick++ 是著名開源圖片處理庫ImageMagick提供的 C++庫。在命令行可以直接使用相關 ImageMagick 的命令直接完成上述任務。要是C++編程完成需要調用 Magick++ 的API。

Ubuntu 安裝magic++庫很簡單:

sudo apt-get install libmagick++-dev 

下面給出例程

Talk is cheap, show me the code.

C++ 代碼:

#include <iostream>
#include <Magick++.h>

int main(int argc, char **argv)
{

    Magick::InitializeMagick(*argv);
    Magick::Image image;
    try{
        image.read("./patternsBoard1.png"); // read an image from directory
        image.resolutionUnits(Magick::PixelsPerCentimeterResolution); // 設置分辨率單位為 像素/厘米
        image.density("120x120"); // 縱、橫分辨率都是 120 px/cm
        image.write("./patternsBoard3.pdf"); // 保存為pdf 
    }catch(Magick::Exception &erro_){
        std::cout<< "Caught exception:" << erro_.what() <<std::endl;
        return 1;
    }
    return 0;
}

使用 CMakeLists.txt. 可以參考 [1]

project(try_magickpp)
cmake_minimum_required(VERSION 2.8)

find_package(ImageMagick COMPONENTS Magick++)
include_directories(${ImageMagick_INCLUDE_DIRS})

aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} ${ImageMagick_LIBRARIES})

如此,可以看到讀入的圖片文件保存為 pdf,並且設置的DPI,可以打印出想要的大小。

與 Opencv 配合

我們有從 Opencv 處理后的cv::Mat ,下面提供 從cv::Mat 轉為 Magick::Image (Magick++ 的Image類)[2].

    cv::Mat cvimage;
    cvimage = cv::imread("./patternsBoard1.png" ,cv::IMREAD_GRAYSCALE);
    Magick::Image image(cvimage.cols,cvimage.rows,"I",MagickCore::CharPixel, (char *)cvimage.data);

當然,如果要使用這段代碼是需include OpenCV的頭,並且需要在CMakeLists.txt 中指明鏈接OpenCV的庫。

相關鏈接


  1. (CMake 配置Magick++)https://stackoverflow.com/questions/7902916/set-path-in-cmake-c-imagemagick) ↩︎

  2. http://blog.csdn.net/panda1234lee/article/details/71439288 ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM