From 6fc4df0550b61bc3aeaeb32d084750b9141a325d Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Mon, 4 Dec 2023 17:50:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A4=9A=E6=B5=81=E9=99=A4?= =?UTF-8?q?=E7=BA=A2=E7=AE=97=E6=B3=95=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=BC=9A?= =?UTF-8?q?=E5=B0=86=E9=9D=9E=E7=BA=A2=E8=89=B2=E8=89=B2=E5=BD=A9=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8CBUG-798?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/ImageProcess/ImageMultiOutputRed.cpp | 43 +++---------------- hgdriver/ImageProcess/ImageMultiOutputRed.h | 16 ++++++- 2 files changed, 20 insertions(+), 39 deletions(-) diff --git a/hgdriver/ImageProcess/ImageMultiOutputRed.cpp b/hgdriver/ImageProcess/ImageMultiOutputRed.cpp index 26a142b..ee6e270 100644 --- a/hgdriver/ImageProcess/ImageMultiOutputRed.cpp +++ b/hgdriver/ImageProcess/ImageMultiOutputRed.cpp @@ -18,46 +18,15 @@ std::vector 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); } diff --git a/hgdriver/ImageProcess/ImageMultiOutputRed.h b/hgdriver/ImageProcess/ImageMultiOutputRed.h index 2aa13f9..ad5c54c 100644 --- a/hgdriver/ImageProcess/ImageMultiOutputRed.h +++ b/hgdriver/ImageProcess/ImageMultiOutputRed.h @@ -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 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