提交多流输出算法封装文件

This commit is contained in:
gb 2023-11-15 11:31:37 +08:00
parent 9b8100d8df
commit 47e802669c
2 changed files with 219 additions and 0 deletions

View File

@ -0,0 +1,90 @@
#include "multi_out.h"
#include <json/gb_json.h>
#include <huagao/hgscanner_error.h>
#include <sane/sane_option_definitions.h>
#include <lang/app_language.h>
static std::string device_opt_json[] = {
"{\"is-multiout\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"fix-id\":34817,\"auth\":0,\"size\":4,\"cur\":false,\"default\":false},\"multiout-type\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"fix-id\":34818,\"auth\":0,\"enabled\":false,\"size\":66,\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend\":\"is-multiout==true\"},\"mo-threshold\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u591a\\u6d41\\u9ed1\\u767d\\u9608\\u503c\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u9608\\u503c\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":40,\"default\":40,\"range\":{\"min\":1,\"max\":255,\"step\":1},\"depend\":\"is-multiout==true\"},\"mo-bin-type\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u65b9\\u6cd5\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u65b9\\u6cd5\",\"type\":\"string\",\"auth\":0,\"size\":28,\"cur\":\"\\u5355\\u9608\\u503c\",\"default\":\"\\u5355\\u9608\\u503c\",\"range\":[\"\\u5355\\u9608\\u503c\",\"\\u5927\\u6d25\\u9608\\u503c\",\"\\u9ad8\\u65af\\u5c40\\u90e8\\u81ea\\u9002\\u5e94\",\"\\u5747\\u503c\\u5c40\\u90e8\\u81ea\\u9002\\u5e94\",\"\\u9519\\u8bef\\u6269\\u6563\"],\"depend\":\"is-multiout==true\"},\"mo-bin-block-size\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u5757\\u5927\\u5c0f\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u5757\\u5927\\u5c0f\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":51,\"default\":51,\"range\":{\"min\":5,\"max\":200,\"step\":1},\"depend\":\"is-multiout==true\"},\"mo-bin-const\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u5e38\\u91cf\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u5e38\\u91cf\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":41,\"default\":41,\"range\":{\"min\":5,\"max\":200,\"step\":1},\"depend\":\"is-multiout==true\"}}"
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// image_processor
multi_outer::multi_outer() : image_processor("multi_outer")
{
std::string json("");
for (auto& v : device_opt_json)
json += v;
set_opt_json_text(&json[0]);
enabled_ = false;
}
multi_outer::~multi_outer()
{}
int multi_outer::type_from_str(const char* type)
{
static struct
{
std::string str;
int type;
}typemap[] = {
{ OPTION_VALUE_DLSCLX_CS_HD_HB, IMageMulti::ALL},
{ OPTION_VALUE_DLSCLX_CS_HD, IMageMulti::COLORGRAY },
{ OPTION_VALUE_DLSCLX_CS_HB, IMageMulti::COLORBW },
{ OPTION_VALUE_DLSCLX_HD_HB, IMageMulti::GRAYBW }
};
for (auto& v : typemap)
{
if (v.str == type)
return v.type;
}
return typemap[0].type;
}
int multi_outer::set_value(const char* name, void* val)
{
int ret = SCANNER_ERR_OK; // SCANNER_ERR_DEVICE_NOT_SUPPORT;
if (strcmp(name, SANE_STD_OPT_NAME_IS_MULTI_OUT) == 0)
enabled_ = *(bool*)val;
else if (strcmp(name, SANE_STD_OPT_NAME_MULTI_OUT_TYPE) == 0)
type_ = multi_outer::type_from_str(to_default_language((char*)val, nullptr));
else
ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;
return ret;
}
void multi_outer::enable(const char* name, bool able)
{
enabled_ = able;
}
int multi_outer::process(std::vector<PROCIMGINFO>& in, std::vector<PROCIMGINFO>& out)
{
int ret = SCANNER_ERR_OK;
if (!enabled_)
out = in;
else
{
IMageMulti multi(type_, threshold_, threshold_type_, block_size_, constant_);
for (auto& v : in)
{
std::vector<cv::Mat> o = multi.apply(v.img);
}
}
return ret;
}

View File

@ -0,0 +1,129 @@
#pragma once
// image processor
//
// created on 2023-11-14
//
// ver: 1.0
//
// NOTE: the interface is for all algorithms are in ONE module
#include <imgprc/img_processor.h>
#include <ImageMulti.h>
class multi_outer : public image_processor
{
int type_ = IMageMulti::ALL;
int threshold_ = 40;
int threshold_type_ = 0;
int block_size_ = 51;
int constant_ = 41;
public:
multi_outer();
static int type_from_str(const char* type);
protected:
virtual ~multi_outer();
public:
virtual int set_value(const char* name, void* val) override;
virtual void enable(const char* name, bool able) override;
virtual int process(std::vector<PROCIMGINFO>& in, std::vector<PROCIMGINFO>& out) override;
};
//{
// "is-multiout": {
// "cat": "base",
// "group": "base",
// "title": "多流输出",
// "desc": "同时输出多种颜色模式的图像",
// "type": "bool",
// "fix-id": 34817,
// "auth": 0,
// "size": 4,
// "cur": false,
// "default": false
// },
// "multiout-type": {
// "cat": "base",
// "group": "base",
// "title": "多流输出类型",
// "desc": "选择多流输出的类型",
// "type": "string",
// "fix-id": 34818,
// "auth": 0,
// "enabled": false,
// "size": 66,
// "cur": "彩色+灰度+黑白",
// "default": "彩色+灰度+黑白",
// "range": ["彩色+灰度+黑白", "彩色+灰度", "彩色+黑白", "灰度+黑白"],
// "depend": "is-multiout==true"
// },
// "mo-threshold": {
// "cat": "base",
// "group": "imgp",
// "title": "多流黑白阈值",
// "desc": "多流输出黑白图像时的二值化阈值",
// "type": "int",
// "auth": 0,
// "size": 4,
// "cur": 40,
// "default": 40,
// "range": {
// "min": 1,
// "max": 255,
// "step": 1
// },
// "depend": "is-multiout==true"
// },
// "mo-bin-type": {
// "cat": "base",
// "group": "imgp",
// "title": "二值化方法",
// "desc": "多流输出黑白图像时的二值化方法",
// "type": "string",
// "auth": 0,
// "size": 28,
// "cur": "单阈值",
// "default": "单阈值",
// "range": ["单阈值", "大津阈值", "高斯局部自适应", "均值局部自适应", "错误扩散"],
// "depend": "is-multiout==true"
// },
// "mo-bin-block-size": {
// "cat": "base",
// "group": "imgp",
// "title": "二值化块大小",
// "desc": "多流输出黑白图像时的二值化块大小",
// "type": "int",
// "auth": 0,
// "size": 4,
// "cur": 51,
// "default": 51,
// "range": {
// "min": 5,
// "max": 200,
// "step": 1
// },
// "depend": "is-multiout==true"
// },
// "mo-bin-const": {
// "cat": "base",
// "group": "imgp",
// "title": "二值化常量",
// "desc": "多流输出黑白图像时的二值化常量",
// "type": "int",
// "auth": 0,
// "size": 4,
// "cur": 41,
// "default": 41,
// "range": {
// "min": 5,
// "max": 200,
// "step": 1
// },
// "depend": "is-multiout==true"
// }
//}