mirror of http://192.168.1.51:8099/lmh188/twain3.0
1.添加答题卡除红算法处理;
2.调整锐化、二值化、答题卡除红的算法处理逻辑,适配全通、好分数、博冠; 3.添加答题卡除红相关参数变量; 4.开启答题卡除红采集彩色图像;
This commit is contained in:
parent
cad96b6e21
commit
d6b74c6807
|
@ -154,7 +154,9 @@ GScanO200::~GScanO200()
|
|||
devState = DEV_STOP;
|
||||
m_threadUsb->join();
|
||||
m_threadUsb.reset();
|
||||
//writelog("~GScanO200");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void GScanO200::open(int vid, int pid)
|
||||
|
@ -187,6 +189,7 @@ int GScanO200::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
devState = DEV_STOP;
|
||||
m_threadUsb->join();
|
||||
m_threadUsb.reset();
|
||||
//writelog("aquire_bmpdata m_threadUsb.reset();");
|
||||
}
|
||||
Stop_scan();//ֹͣɨÃè
|
||||
ResetScanner();
|
||||
|
@ -204,8 +207,8 @@ int GScanO200::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
if (m_pImages->valid()) {
|
||||
bmpdata = *(m_pImages->popBmpdata());
|
||||
//static int aqimgindex = 0;
|
||||
//FileTools::write_log("1.txt", "aquireed image " + to_string(++aqimgindex));
|
||||
//FileTools::write_log("E:\\Users\\huago\\Desktop\\1.txt", "aquired image "+ to_string(++aqimgindex));
|
||||
////FileTools::write_log("1.txt", "aquireed image " + to_string(++aqimgindex));
|
||||
//FileTools::write_log("C:\\Users\\huagao\\Desktop\\out.txt", "aquired procced image "+ to_string(++aqimgindex));
|
||||
|
||||
|
||||
#ifdef LOG_NORMAL
|
||||
|
@ -242,7 +245,7 @@ std::string GScanO200::GetFWVersion()
|
|||
std::string ver = fwVersion.substr((fwVersion.length() - 2), 2);
|
||||
int verValue = atoi(ver.c_str());
|
||||
m_bread_fixed_ratio_fromDSP = verValue >= 15;
|
||||
writelog(m_bread_fixed_ratio_fromDSP ? "can get ratio from dsp" : "can not get dsp ratio");
|
||||
//writelog(m_bread_fixed_ratio_fromDSP ? "can get ratio from dsp" : "can not get dsp ratio");
|
||||
updateHVRatio();
|
||||
#endif // G200
|
||||
}
|
||||
|
@ -316,18 +319,6 @@ void GScanO200::Scanner_StartScan(UINT16 count)
|
|||
devState = DEV_STOP;
|
||||
m_threadUsb->join();
|
||||
}
|
||||
#ifndef G200
|
||||
USBCB paperstatus = { GET_PAPER_STATUS ,0,0 };
|
||||
m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
|
||||
m_usb->read_bulk(&paperstatus, sizeof(paperstatus));
|
||||
if (paperstatus.u32_Data == 0) {
|
||||
m_pImages->setscanflags(false);
|
||||
devState = DEV_WRONG;
|
||||
Set_ErrorCode(NO_FEED);
|
||||
return;
|
||||
}
|
||||
#endif // !G200
|
||||
|
||||
|
||||
USBCB status = { GET_DSP_STATUS ,0,0 };
|
||||
m_usb->write_bulk(&status, sizeof(status));
|
||||
|
@ -353,6 +344,18 @@ void GScanO200::Scanner_StartScan(UINT16 count)
|
|||
break;
|
||||
}
|
||||
|
||||
#ifndef G200
|
||||
USBCB paperstatus = { GET_PAPER_STATUS ,0,0 };
|
||||
m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
|
||||
m_usb->read_bulk(&paperstatus, sizeof(paperstatus));
|
||||
if (paperstatus.u32_Data == 0) {
|
||||
m_pImages->setscanflags(false);
|
||||
devState = DEV_WRONG;
|
||||
Set_ErrorCode(NO_FEED);
|
||||
return;
|
||||
}
|
||||
#endif // !G200
|
||||
|
||||
if (gcap.is_duplex)
|
||||
count = count == 65535 ? 65535 : count / 2;
|
||||
USBCB usbcb = { START_COMMAND,(UINT32)count ,0 };
|
||||
|
@ -362,6 +365,11 @@ void GScanO200::Scanner_StartScan(UINT16 count)
|
|||
m_threadUsb.reset(new std::thread(&GScanO200::usbmain, this));
|
||||
m_pImages->run();
|
||||
}
|
||||
else
|
||||
{
|
||||
devState = DEV_WRONG;
|
||||
Set_ErrorCode(USB_DISCONNECTED);
|
||||
}
|
||||
}
|
||||
|
||||
void GScanO200::Stop_scan()
|
||||
|
@ -447,9 +455,9 @@ void GScanO200::usbhotplug_callback(bool isconnect, void* userdata)
|
|||
void GScanO200::usbhotplug(bool isleft)
|
||||
{
|
||||
if (isleft) {
|
||||
devState = DEV_WRONG;
|
||||
Error_Code = USB_DISCONNECTED;
|
||||
m_pImages->setscanflags(false);
|
||||
devState = DEV_WRONG;
|
||||
Error_Code = USB_DISCONNECTED;
|
||||
m_pImages->setscanflags(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -499,8 +507,12 @@ void GScanO200::usbmain()
|
|||
imgData = Get_Img_Data(totalNum);
|
||||
if (!imgData->size()) {
|
||||
Stop_scan();
|
||||
writelog("imgData->size() error");
|
||||
break;
|
||||
}
|
||||
m_pImages->pushMat(std::shared_ptr<IDecode>(new G200Decode(imgData)));
|
||||
/*static int rawdataindex = 0;
|
||||
FileTools::write_log("C:\\Users\\huagao\\Desktop\\out.txt", "origin rawbuffer index " + std::to_string(++rawdataindex));*/
|
||||
#ifdef LOG_NORMAL
|
||||
static int rawdataindex = 0;
|
||||
FileTools::write_log("out.txt", "Enquque rawbuffer index " + std::to_string(++rawdataindex));
|
||||
|
@ -561,6 +573,9 @@ USBCB GScanO200::Get_Scanner_Status()
|
|||
|
||||
std::shared_ptr<std::vector<char>> GScanO200::Get_Img_Data(int bufferSize)
|
||||
{
|
||||
if (m_usb.get() && !m_usb->is_connected())
|
||||
return std::shared_ptr<std::vector<char>>(new std::vector<char>());
|
||||
|
||||
std::shared_ptr<std::vector<char>> imData(new std::vector<char>(bufferSize));
|
||||
StopWatch sw;
|
||||
int readed = 0;
|
||||
|
|
|
@ -123,8 +123,8 @@ void ImageMatQueue::clear()
|
|||
void ImageMatQueue::setparam(const GScanCap& param)
|
||||
{
|
||||
scanParam = param;
|
||||
scanParam.is_duplex = 0;
|
||||
scanParam.imageRotateDegree = 90.0f;
|
||||
//scanParam.is_duplex = 0;
|
||||
//scanParam.imageRotateDegree = 90.0f;
|
||||
#ifdef DEBUG
|
||||
string outinfo = "autodescrew : " + to_string(scanParam.autodescrew) + "\n brightness : " + to_string(scanParam.brightness) + "\n contrast " + to_string(scanParam.contrast) + "\n enhance_color : " + to_string(scanParam.enhance_color) + "\n en_fold: " + to_string(scanParam.en_fold)
|
||||
+ "\n fillbackground : " + to_string(scanParam.fillbackground) + "\n is_fillhole : " + to_string(scanParam.fillhole.is_fillhole) + "\n fillholeratio : " + to_string(scanParam.fillhole.fillholeratio) + "\n filter : " + to_string(scanParam.filter) + "\n gamma : " + to_string(scanParam.gamma)
|
||||
|
@ -174,15 +174,19 @@ void ImageMatQueue::setparam(const GScanCap& param)
|
|||
int contrast = (int)(param.contrast * 0.036);//[-36,36] 0.036=72.0/2000.0;
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyAdjustColors(bright, contrast, param.gamma)));
|
||||
}
|
||||
|
||||
if (param.pixtype == 0) //threshold
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyBWBinaray(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY)));
|
||||
|
||||
//´ðÌ⿨³ýºì
|
||||
if (scanParam.hsvcorrect)
|
||||
{
|
||||
m_iaList.push_back(shared_ptr<CImageApplyHSVCorrect>(new CImageApplyHSVCorrect(CImageApplyHSVCorrect::CorrectOption::Red_Removal)));
|
||||
}
|
||||
//Èñ»¯
|
||||
if (param.sharpen) {
|
||||
SharpenBlur sb = (SharpenBlur)param.sharpen;
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplySharpen(sb)));
|
||||
}
|
||||
|
||||
//¶þÖµ»¯
|
||||
if (param.pixtype == 0) //threshold
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyBWBinaray(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY)));
|
||||
|
||||
if (param.resolution_dst != param.resolution_native)
|
||||
{
|
||||
|
@ -201,6 +205,7 @@ void ImageMatQueue::setparam(const GScanCap& param)
|
|||
m_iaList.push_back(shared_ptr< CImageApply>(apply));
|
||||
}
|
||||
|
||||
|
||||
if (scanParam.en_fold)
|
||||
{
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyConcatenation(CImageApplyConcatenation::horizontal)));
|
||||
|
@ -271,7 +276,7 @@ void ImageMatQueue::proc()
|
|||
for (auto& buf : buffs) {
|
||||
ImreadModes rm;
|
||||
|
||||
if (scanParam.filter != 3 || scanParam.enhance_color)
|
||||
if (scanParam.filter != 3 || scanParam.enhance_color || scanParam.hsvcorrect)
|
||||
rm = IMREAD_COLOR;
|
||||
else
|
||||
rm = scanParam.pixtype == 2 ? IMREAD_COLOR : IMREAD_GRAYSCALE;
|
||||
|
|
|
@ -50,6 +50,7 @@ using namespace std;
|
|||
#define MULTIOUTPUT "iMultiOutPut"
|
||||
#define OUTHOLE "bOutHole"
|
||||
#define OUTHOLERATIO "iOutHoleRatio"
|
||||
#define HSVCORRECT "bHsvCorrect"
|
||||
|
||||
//<!送纸选项卡
|
||||
#define ULTRADETECT "bUltrasonicDetect"
|
||||
|
@ -95,6 +96,7 @@ typedef struct tagCONFIGPARAMS
|
|||
bool EnOutHole;
|
||||
int OutHoleRatio;
|
||||
bool EnMultiOutPutR;
|
||||
bool EnHsvCorrect;
|
||||
|
||||
/*送纸部分选项卡参数*/
|
||||
bool EnUltrasonicDetect;
|
||||
|
@ -182,6 +184,7 @@ struct GScanCap
|
|||
byte is_switchfrontback; /**交换正反面*/
|
||||
byte autodescrew; /**< 自动纠偏*/
|
||||
byte multi_output_red; /*多流输出*/
|
||||
byte hsvcorrect; /**<´ðÌ⿨³ýºì*/
|
||||
byte filter; /**< 除色*/
|
||||
byte sharpen;
|
||||
byte enhance_color; /**< 颜色增强*/
|
||||
|
|
|
@ -7,7 +7,7 @@ hgConfigClass::hgConfigClass(GScanCap param)
|
|||
m_param = { 0 };
|
||||
PaperStatus ps = { param.papertype,param.paperAlign };
|
||||
m_param.paper = ContainspaperTypesKey(ps) ? SupPaperTyps[ps] : 0;
|
||||
if(param.filter!=3||param.enhance_color!=0)
|
||||
if(param.filter!=3||param.enhance_color!=0||param.hsvcorrect)
|
||||
m_param.color = 1;//color
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue