最近在项目中有个需求:区分拍照图片与扫描图片。找不到什么好的方法,目前感觉可行的方式是通过DPI来区分:
一般拍照图片DPI是96甚至更低,扫描图片DPI一般是120、150、200、300等更高。
但是opencv没有获取DPI相关的函数,遍寻百度,觉得还是GDI+实现起来较好。
GDI+的头文件和库,在windows系统中是自带的。
先要引入GDI+的头文件和库
#include "GdiPlus.h"
#pragma comment(lib,"gdiplus.lib")
#define ULONG_PTR ULONG
C++代码实现:
ULONG_PTR m_gdiplus;//为调用GDI+定义的变量
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplus, &gdiplusStartupInput, NULL);
//定义GDI+的状态信息变量,在调试过程查看是否出错
Gdiplus::Status status = Gdiplus::GenericError;
CString sFileName(filename); //filename为图片路径名,char* to CString
Gdiplus::Image imgtemp(sFileName);
status = imgtemp.GetLastStatus();
if (status != Gdiplus::Ok)
cout << "GDI加载图像失败!" <