#include "ImageMulti.h" #include "ImageApplyHeaders.h" IMageMulti::IMageMulti(int multiType,int thre) { m_multiType = multiType; m_thre = thre; } IMageMulti::~IMageMulti(void) { } std::vector IMageMulti::apply(cv::Mat& pDib) { std::vector 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 IMageMulti::apply(cv::Mat& pDib, int multitype) { m_multiType = multitype; return apply(pDib); } std::vector IMageMulti::apply(std::vector& pDib, int multitype) { std::vector 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; }