2022-05-03 03:56:07 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
// API for image process
|
|
|
|
|
//
|
|
|
|
|
// created on 2022-03-01
|
|
|
|
|
//
|
|
|
|
|
#include "huagao/hgscanner_error.h"
|
|
|
|
|
#include "common_setting.h"
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <vector>
|
|
|
|
|
//#include "common_setting.h"
|
|
|
|
|
namespace hg_imgproc
|
|
|
|
|
{
|
|
|
|
|
typedef struct _img_data
|
|
|
|
|
{
|
|
|
|
|
int img_fmt; // 图片格式(BMP、PNG……,暂时未用)
|
|
|
|
|
int width; // 行宽度(像素数)
|
|
|
|
|
int height; // 高度(像素数)
|
|
|
|
|
int line_bytes; // 每行的字节数
|
|
|
|
|
int bits; // 每个像素的位深
|
|
|
|
|
bool is_bw; // 是否为黑白图片,由图像处理模块设置
|
|
|
|
|
unsigned bytes; // 图像数据字节数(buf中的字节数)
|
|
|
|
|
void* ip_data; // 图像处理模块的自定义数据,调用者不要随意更改此值!!!
|
|
|
|
|
void* buf; // 图像数据信息
|
|
|
|
|
}IMGDATA, *LPIMGDATA;
|
|
|
|
|
|
|
|
|
|
// 用于释放图像处理模块返回的各种动态内存, mem[i] == NULL 时终止,下列相同参数均照此规则
|
|
|
|
|
void imgproc_free_memory(LPIMGDATA* mem);
|
|
|
|
|
|
|
|
|
|
// 所有函数均返回“int”值,代表错误代码, 0为成功,其它错误码由图像处理模块开发者定义
|
|
|
|
|
|
|
|
|
|
// Function: 用于将原始数据(如图像文件内容),解码为target_fmt指定的图像格式
|
|
|
|
|
//
|
|
|
|
|
// Parameters: raw - 原始的图像数据
|
|
|
|
|
//
|
|
|
|
|
// bytes - raw中数据字节数
|
|
|
|
|
//
|
|
|
|
|
// bits - 位深
|
|
|
|
|
//
|
|
|
|
|
// out - 用于接收解码后的图像数据。由图像处理模块分配内存,调用者调用imgproc_free_memory释放
|
|
|
|
|
//
|
|
|
|
|
// Return: 错误码
|
|
|
|
|
//
|
|
|
|
|
// NOTE: 该函数返回的out结构体中,buf为图像处理的中间数据类型(如cv::mat*),要想获取最终的图片数据,
|
|
|
|
|
// 需要再调用 imgproc_final 函数进行转换
|
|
|
|
|
int imgproc_decode(void* buf, unsigned bytes, int bits, LPIMGDATA** out);
|
|
|
|
|
|
|
|
|
|
// Function: 将倾斜的文本校正
|
|
|
|
|
//
|
|
|
|
|
// Parameters: raw - [in]: 原始的图像数据,*raw == NULL时终止
|
|
|
|
|
//
|
|
|
|
|
// [out]: 最终的图像数据
|
|
|
|
|
//
|
|
|
|
|
// out - 用于接收解码后的图像数据。由图像处理模块分配内存,调用者调用imgproc_free_memory释放
|
|
|
|
|
//
|
|
|
|
|
// dpi - 图片DPI
|
|
|
|
|
//
|
|
|
|
|
// double_face - 是否双面
|
|
|
|
|
//
|
|
|
|
|
// Return: 错误码
|
|
|
|
|
int imgproc_correct_text(LPIMGDATA** raw, int dpi, bool double_face); // 适用于raw从其它图像处理函数返回的情况
|
|
|
|
|
int imgproc_correct_text(LPIMGDATA* raw, LPIMGDATA** out, int dpi, bool double_face); // 适用于raw从文件或者内存中转换而来
|
|
|
|
|
|
|
|
|
|
// Function: 自动匹配颜色
|
|
|
|
|
//
|
|
|
|
|
// Parameters: raw - [in]: 原始的图像数据,*raw == NULL时终止
|
|
|
|
|
//
|
|
|
|
|
// [out]: 最终的图像数据
|
|
|
|
|
//
|
|
|
|
|
// out - 用于接收解码后的图像数据。由图像处理模块分配内存,调用者调用imgproc_free_memory释放
|
|
|
|
|
//
|
|
|
|
|
// double_face - 是否双面
|
|
|
|
|
//
|
|
|
|
|
// Return: 错误码
|
|
|
|
|
int imgproc_auto_adjust_color(LPIMGDATA** raw, bool double_face); // 适用于raw从其它图像处理函数返回的情况
|
|
|
|
|
int imgproc_auto_adjust_color(LPIMGDATA* raw, LPIMGDATA** out, bool double_face); // 适用于raw从文件或者内存中转换而来
|
|
|
|
|
|
|
|
|
|
// Function: 图像拆分
|
|
|
|
|
//
|
|
|
|
|
// Parameters: raw - [in]: 原始的图像数据,*raw == NULL时终止
|
|
|
|
|
//
|
|
|
|
|
// [out]: 最终的图像数据
|
|
|
|
|
//
|
|
|
|
|
// out - 用于接收解码后的图像数据。由图像处理模块分配内存,调用者调用imgproc_free_memory释放
|
|
|
|
|
//
|
|
|
|
|
// Return: 错误码
|
|
|
|
|
int imgproc_split(LPIMGDATA** raw); // 适用于raw从其它图像处理函数返回的情况
|
|
|
|
|
int imgproc_split(LPIMGDATA* raw, LPIMGDATA** out); // 适用于raw从文件或者内存中转换而来
|
|
|
|
|
|
|
|
|
|
// Function: 多流输出
|
|
|
|
|
//
|
|
|
|
|
// Parameters: raw - [in]: 原始的图像数据,*raw == NULL时终止
|
|
|
|
|
//
|
|
|
|
|
// out - 用于接收解码后的图像数据。由图像处理模块分配内存,调用者调用imgproc_free_memory释放
|
|
|
|
|
//
|
|
|
|
|
// dpi - 图片DPI
|
|
|
|
|
//
|
|
|
|
|
// double_face - 是否双面
|
|
|
|
|
//
|
|
|
|
|
// Return: 错误码
|
|
|
|
|
int imgproc_multi_out(LPIMGDATA* raw, LPIMGDATA** out, int dpi, bool double_face);
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
TARGET_FORMAT_GRAY = 1 << 0,
|
|
|
|
|
TARGET_FORMAT_BLACK_WHITE = 1 << 1,
|
|
|
|
|
TARGET_FORMAT_RGB = 1 << 2,
|
|
|
|
|
};
|
|
|
|
|
// Function: 用于将图像处理过程的中间态数据,转换为最终的图片数据
|
|
|
|
|
//
|
|
|
|
|
// Parameters: raw - [in]: 原始的图像数据,*raw == NULL时终止,通常该变量是由其它图像处理函数返回的
|
|
|
|
|
//
|
|
|
|
|
// [out]: 最终的图像数据
|
|
|
|
|
//
|
|
|
|
|
// target_fmt - 预期解码到的格式,TARGET_FORMAT_xxx
|
|
|
|
|
//
|
|
|
|
|
// Return: 错误码
|
|
|
|
|
int imgproc_final(LPIMGDATA** raw, int target_fmt, int dpi);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// NEW,flow ...
|
|
|
|
|
//
|
|
|
|
|
// 1 - call init to initialize an image processing object handle HIMGPRC
|
|
|
|
|
//
|
|
|
|
|
// 2 - call load_buffer or load_file to load raw data
|
|
|
|
|
//
|
|
|
|
|
// 3 - call image-processing methods
|
|
|
|
|
//
|
|
|
|
|
// 4 - repeat step-3
|
|
|
|
|
//
|
|
|
|
|
// 5 - call final to got outputing data
|
|
|
|
|
//
|
|
|
|
|
// 6 - call get_final_data to get outputing data, while return HG_ERR_NO_DATA
|
|
|
|
|
//
|
|
|
|
|
// 7 - call release to free the HIMGPRC handle
|
|
|
|
|
//
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
typedef void* HIMGPRC;
|
|
|
|
|
typedef struct _img_proc_param
|
|
|
|
|
{
|
|
|
|
|
int dpi;
|
|
|
|
|
int bits; // 单分量位深
|
|
|
|
|
int channels;
|
|
|
|
|
int color_mode;
|
|
|
|
|
bool double_side;
|
|
|
|
|
bool black_white;
|
|
|
|
|
}IMGPRCPARAM, *LPIMGPRCPARAM;
|
|
|
|
|
typedef struct _img_header
|
|
|
|
|
{
|
|
|
|
|
int width; // in pixel
|
|
|
|
|
int height; // in pixel
|
|
|
|
|
int bits; // per channel
|
|
|
|
|
int channels; // RGB - 3; GRAY - 1; ...
|
|
|
|
|
int line_bytes; // bytes of ONE line
|
|
|
|
|
unsigned total_bytes;// total bytes
|
|
|
|
|
}IMGHEAD, *LPIMGHEAD;
|
|
|
|
|
|
|
|
|
|
|
2022-05-04 08:57:05 +00:00
|
|
|
|
HIMGPRC init(LPSCANCONF parameter,LPIMGPRCPARAM param,int pid);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int load_buffer(HIMGPRC himg,std::shared_ptr<std::vector<char>> buff);
|
|
|
|
|
int load_file(HIMGPRC himg, const char* path_file);
|
|
|
|
|
|
|
|
|
|
//图像数据转换
|
|
|
|
|
int decode(HIMGPRC himg,int pid);
|
|
|
|
|
int correct_text(HIMGPRC himg);
|
|
|
|
|
|
|
|
|
|
//拆分
|
|
|
|
|
int split(HIMGPRC himg,int multioutputtype,bool is_msplit,bool is_multiout_red,int colortype,bool is_duplex);
|
|
|
|
|
int fadeback(HIMGPRC himg,int range,bool is_duplex);
|
|
|
|
|
int multi_out(HIMGPRC himg);
|
|
|
|
|
int multi_out(HIMGPRC himg,int out_type);
|
|
|
|
|
int multi_out_red(HIMGPRC himg);
|
|
|
|
|
int auto_matic_color(HIMGPRC himg,int color_type);
|
|
|
|
|
int auto_crop(HIMGPRC himg);
|
|
|
|
|
int fillhole(HIMGPRC himg);
|
|
|
|
|
int resolution_change(HIMGPRC himg);
|
|
|
|
|
int croprect(HIMGPRC himg);
|
|
|
|
|
int channel(HIMGPRC himg);
|
2022-05-07 09:12:32 +00:00
|
|
|
|
int customgamma(HIMGPRC himg,bool is_custogamma,unsigned char* table,int tableLength);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int antiInflow(HIMGPRC himg,int permeate_lv);
|
|
|
|
|
int colorCorrection(HIMGPRC himg);
|
|
|
|
|
int orentation(HIMGPRC himg);
|
|
|
|
|
int textureRemove(HIMGPRC himg);
|
|
|
|
|
int sharpenType(HIMGPRC himg);
|
|
|
|
|
int nosieDetach(HIMGPRC himg);
|
|
|
|
|
int errorextention(HIMGPRC himg);
|
|
|
|
|
int discardBlank(HIMGPRC himg);
|
|
|
|
|
int answerSheetFilterRed(HIMGPRC himg);
|
|
|
|
|
|
|
|
|
|
int imgtypechange(HIMGPRC himg,std::string img_type_,void *buf,std::vector<unsigned char> &bmpdata);
|
|
|
|
|
int fold(HIMGPRC himg);
|
2022-05-09 11:27:10 +00:00
|
|
|
|
int quality(HIMGPRC himg,int dpi);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int final(HIMGPRC himg);
|
|
|
|
|
|
|
|
|
|
// pimh must not to be NULL, and pimh->total_bytes indicates the length of 'buf'
|
|
|
|
|
//
|
|
|
|
|
// if 'buf' was NULL, then return HG_ERR_INSUFFICIENT_MEMORY
|
|
|
|
|
//
|
|
|
|
|
// index is ZERO-base, if index is valid, fill the 'pimh' first, and copy data to buf if it was not NULL
|
|
|
|
|
// return HG_ERR_NO_DATA if it was out of range
|
|
|
|
|
//
|
|
|
|
|
// return HG_ERR_OK if index has valid image data and buf is large enough
|
|
|
|
|
int get_final_data(HIMGPRC himg, LPIMGHEAD pimh, void** buf, int index = 0);
|
|
|
|
|
int get_final_data(HIMGPRC himg, LPIMGHEAD pimh, std::vector<unsigned char>* buf, int index);
|
|
|
|
|
void release(HIMGPRC himg);
|
|
|
|
|
}
|