twain2/ImageMultiOutput.cpp

61 lines
1.2 KiB
C++

#include "StdAfx.h"
#include "ImageMultiOutput.h"
ImageMultiOutput::ImageMultiOutput(void)
{
}
ImageMultiOutput::~ImageMultiOutput(void)
{
}
//void ImageMultiOutput::apply(cv::Mat& pDib,int side)
//{
// //throw std::logic_error("The method or operation is not implemented.");
//}
cv::Mat ImageMultiOutput::GetMultiFilterMat(cv::Mat &src,int channel)
{
return FilterColor(src,channel);
}
cv::Mat ImageMultiOutput::FilterColor(cv::Mat image,short channel)
{
cv::Mat dstImage(image.rows,image.cols,CV_8UC1);
//int pixelSize = image.depth();
int channels = image.channels();
if(channel > channels -1){
return dstImage;
}
if ( ( channel == 3 ) && ( channels != 4 ) && ( channels != 8 ))
{
return dstImage;
}
if ( channels <= 4 )
{
int srcOffset = image.step - image.cols* channels ;
int dstOffset = dstImage.step - dstImage.cols;
unsigned char* src = image.data;
unsigned char* dst = dstImage.data;
src += channel;
for ( int y = 0; y < image.rows; y++ )
{
for ( int x = 0; x < image.cols; x++, src += channels , dst++ )
{
unsigned short pix = *src;
if(pix >=130){
pix = 255;
}
*dst = pix;
}
src += srcOffset;
dst += dstOffset;
}
}
return dstImage;
}