#include "ImageMulti.h" IMageMulti::IMageMulti(int multiType, int thre, short thresholdType, int blockSize, int constant) : m_multiType(multiType) , m_BWBinaray((CImageApplyBWBinaray::ThresholdType)thresholdType, thre, blockSize, constant) { } 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); m_BWBinaray.apply(dstThre, 0); 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); m_BWBinaray.apply(dstGray, 0); retMats.push_back(dstGray); } } break; case GRAYBW://pDib should be GreyImage(channels() == 1) { cv::Mat dstBW = pDib.clone(); m_BWBinaray.apply(dstBW, 0); if (!dstBW.empty()) retMats.push_back(dstBW); } break; default: break; } return retMats; }