code_device/hgdriver/ImageProcess/ImageMulti.cpp

70 lines
1.6 KiB
C++

#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<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);
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;
}