code_device/hgdriver/ImageProcess_test/ImageMulti.cpp

73 lines
1.7 KiB
C++

#include "ImageMulti.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);
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;
}