更新多流除红算法,解决会将非红色色彩去掉的问题,BUG-798
This commit is contained in:
parent
ca041a1005
commit
6fc4df0550
|
@ -18,46 +18,15 @@ std::vector<cv::Mat> ImageMultiOutputRed::apply(cv::Mat& pDib)
|
||||||
if (pDib.empty())
|
if (pDib.empty())
|
||||||
return retMats;
|
return retMats;
|
||||||
retMats.push_back(pDib);
|
retMats.push_back(pDib);
|
||||||
cv::Mat mat = FilterColor(pDib, m_channelIndex);
|
filterColor(pDib, m_channelIndex);
|
||||||
if (!mat.empty())
|
retMats.push_back(pDib);
|
||||||
retMats.push_back(mat);
|
|
||||||
return retMats;
|
return retMats;
|
||||||
}
|
}
|
||||||
|
|
||||||
cv::Mat ImageMultiOutputRed::FilterColor(cv::Mat image, short channel)
|
void ImageMultiOutputRed::filterColor(cv::Mat& image, short channel)
|
||||||
{
|
{
|
||||||
cv::Mat dstImage(image.rows, image.cols, CV_8UC1);
|
if (image.channels() == 1)
|
||||||
int channels = image.channels();
|
return;
|
||||||
if (channel > channels - 1)
|
|
||||||
{
|
|
||||||
return cv::Mat();
|
|
||||||
}
|
|
||||||
if ((channel == 3) && (channels != 4) && (channels != 8))
|
|
||||||
{
|
|
||||||
return cv::Mat();
|
|
||||||
}
|
|
||||||
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++)
|
cv::extractChannel(image, image, channel);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,15 @@
|
||||||
|
/*
|
||||||
|
* ====================================================
|
||||||
|
|
||||||
|
* 功能:多流除红
|
||||||
|
* 作者:刘丁维
|
||||||
|
* 生成时间:2023/12/02
|
||||||
|
* 最近修改时间:v1.0 2023/12/02
|
||||||
|
* 版本号:v1.0
|
||||||
|
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef IMAGE_MULTI_OUTPUT_RED_H
|
#ifndef IMAGE_MULTI_OUTPUT_RED_H
|
||||||
#define IMAGE_MULTI_OUTPUT_RED_H
|
#define IMAGE_MULTI_OUTPUT_RED_H
|
||||||
#include "IMulti.h"
|
#include "IMulti.h"
|
||||||
|
@ -9,9 +21,9 @@ public:
|
||||||
ImageMultiOutputRed(short channelIndex);
|
ImageMultiOutputRed(short channelIndex);
|
||||||
virtual ~ImageMultiOutputRed(void);
|
virtual ~ImageMultiOutputRed(void);
|
||||||
virtual std::vector<cv::Mat> apply(cv::Mat& pDib) override;
|
virtual std::vector<cv::Mat> apply(cv::Mat& pDib) override;
|
||||||
|
private:
|
||||||
|
void filterColor(cv::Mat& image, short channel);
|
||||||
private:
|
private:
|
||||||
short m_channelIndex;
|
short m_channelIndex;
|
||||||
cv::Mat FilterColor(cv::Mat image, short channel);
|
|
||||||
};
|
};
|
||||||
#endif //!IMAGE_MULTI_OUTPUT_RED_H
|
#endif //!IMAGE_MULTI_OUTPUT_RED_H
|
||||||
|
|
Loading…
Reference in New Issue