twain3.0/huagao/ImageProcess/ImageMulti.cpp

99 lines
2.5 KiB
C++
Raw Permalink Normal View History

2022-06-29 12:24:24 +00:00
#include "ImageMulti.h"
#include "ImageApplyHeaders.h"
IMageMulti::IMageMulti(int multiType,int thre)
{
m_multiType = multiType;
m_thre = thre;
}
IMageMulti::~IMageMulti(void)
{
}
std::vector<cv::Mat> IMageMulti::apply(cv::Mat& pDib)
{
std::vector<cv::Mat> retMats;
if (pDib.empty())
return retMats;
retMats.push_back(pDib);
switch (m_multiType)
{
case ALL:
{
if (pDib.channels() == 3){
cv::Mat dst;
cv::cvtColor(pDib, dst,cv::COLOR_BGR2GRAY);
retMats.push_back(dst);
}
cv::Mat dstThre;
cv::cvtColor(pDib, dstThre,cv::COLOR_BGR2GRAY);
//cv::threshold(dstThre, dstThre, m_thre, 255, cv::THRESH_BINARY);
CImageApplyBWBinaray bw(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY);
bw.apply(dstThre, 0);
//cv::adaptiveThreshold(dstThre,dstThre,255,cv::ADAPTIVE_THRESH_GAUSSIAN_C,cv::THRESH_BINARY,25,5);
if (!dstThre.empty())
{
retMats.push_back(dstThre);
}
}
break;
case COLORGRAY:
{
if (pDib.channels() == 3) {
cv::Mat dstGray;
cv::cvtColor(pDib, dstGray, cv::COLOR_BGR2GRAY);
retMats.push_back(dstGray);
}
}
break;
case COLORBW:
{
if (pDib.channels() == 3) {
cv::Mat dstGray;
cv::cvtColor(pDib, dstGray, cv::COLOR_BGR2GRAY);
CImageApplyBWBinaray bw(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY);
bw.apply(dstGray, 0);
// cv::Mat dstBW;
// cv::adaptiveThreshold(dstGray,dstBW,255,cv::ADAPTIVE_THRESH_GAUSSIAN_C,cv::THRESH_BINARY,25,5);
retMats.push_back(dstGray);
}
}
break;
case GRAYBW://pDib should be GreyImage(channels() == 1)
{
cv::Mat dst = pDib.clone();
CImageApplyBWBinaray bw(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY);
bw.apply(dst, 0);
// cv::Mat dstBW;
// cv::adaptiveThreshold(pDib,dstBW,255,cv::ADAPTIVE_THRESH_GAUSSIAN_C,cv::THRESH_BINARY,25,5);
if (!dst.empty())
{
retMats.push_back(dst);
}
}
break;
default:
break;
}
return retMats;
}
std::vector<cv::Mat> IMageMulti::apply(cv::Mat& pDib, int multitype)
{
m_multiType = multitype;
return apply(pDib);
}
std::vector<cv::Mat> IMageMulti::apply(std::vector<cv::Mat>& pDib, int multitype)
{
std::vector<cv::Mat> m_rets;
m_multiType = multitype;
for (auto& node : pDib)
{
auto nodes = apply(node);
m_rets.insert(m_rets.end(), nodes.begin(), nodes.end());
}
return m_rets;
}