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