mirror of http://192.168.1.51:8099/lmh188/twain3.0
61 lines
1.2 KiB
C++
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;
|
||
|
}
|