#include "ImageMulti.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); 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); cv::Mat dstBW; cv::adaptiveThreshold(dstGray,dstBW,255,cv::ADAPTIVE_THRESH_GAUSSIAN_C,cv::THRESH_BINARY,25,5); retMats.push_back(dstBW); } } break; case GRAYBW://pDib should be GreyImage(channels() == 1) { cv::Mat dstBW; cv::adaptiveThreshold(pDib,dstBW,255,cv::ADAPTIVE_THRESH_GAUSSIAN_C,cv::THRESH_BINARY,25,5); if (!dstBW.empty()) { retMats.push_back(dstBW); } } break; default: break; } return retMats; }