提交多流输出算法封装文件
This commit is contained in:
parent
9b8100d8df
commit
47e802669c
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
// }
|
||||||
|
//}
|
Loading…
Reference in New Issue