diff --git a/hgdriver/ImageProcess/CMakeLists.txt b/hgdriver/ImageProcess/CMakeLists.txt index 2ea22b5..a19d918 100644 --- a/hgdriver/ImageProcess/CMakeLists.txt +++ b/hgdriver/ImageProcess/CMakeLists.txt @@ -9,22 +9,22 @@ set(DIR_SRCS ${DIR_SRCS} ${DIR_HEADS}) add_library(${PROJECT_NAME} STATIC ${DIR_SRCS}) target_link_libraries(${PROJECT_NAME} PRIVATE - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libopencv_world.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libittnotify.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibjasper.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibjpeg-turbo.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibpng.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibprotobuf.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibtiff.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libquirc.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libzlib.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibwebp.a - ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libIlmImf.a - ) + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libopencv_world.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libittnotify.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibjasper.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibjpeg-turbo.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibpng.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibprotobuf.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibtiff.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libquirc.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libzlib.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/liblibwebp.a + ${PROJECT_SOURCE_DIR}/../3rdparty/lib/x86_64/libIlmImf.a +) target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/../3rdparty/nick - ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/include - ) - -set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../../../build/) + ${PROJECT_SOURCE_DIR}/../3rdparty/nick + ${PROJECT_SOURCE_DIR}/../hgimgproc + ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/include + ) +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../staticlib) diff --git a/hgdriver/ImageProcess/ImageApplyChannel.cpp b/hgdriver/ImageProcess/ImageApplyChannel.cpp index 2997cf3..1b9180c 100644 --- a/hgdriver/ImageProcess/ImageApplyChannel.cpp +++ b/hgdriver/ImageProcess/ImageApplyChannel.cpp @@ -18,10 +18,10 @@ CImageApplyChannel::~CImageApplyChannel() if (colors != nullptr) delete colors; } -void CImageApplyChannel::apply(cv::Mat& pDib,int side) +void CImageApplyChannel::apply(cv::Mat& pDib, int side) { - (void)side; - if (pDib.empty()) return; + (void)side; + if (pDib.empty()) return; cv::Mat dst(pDib.rows, pDib.cols, CV_8UC1); switch (m_channel) @@ -35,9 +35,9 @@ void CImageApplyChannel::apply(cv::Mat& pDib,int side) break; case Blue: cv::extractChannel(pDib, dst, 0); - break; - case All: - colourless(pDib, dst, 80); + break; + case All: + colourless(pDib, dst, 80); break; case Except_Red: except_channel(pDib, dst, 2); @@ -61,7 +61,7 @@ void CImageApplyChannel::apply(cv::Mat& pDib,int side) void CImageApplyChannel::apply(std::vector& mats, bool isTwoSide) { - (void)isTwoSide; + (void)isTwoSide; int i = 0; for (cv::Mat& var : mats) { if (i != 0 && isTwoSide == false) @@ -72,57 +72,56 @@ void CImageApplyChannel::apply(std::vector& mats, bool isTwoSide) } } -void CImageApplyChannel::except_channel(const cv::Mat & src, cv::Mat & dst, int channel) +void CImageApplyChannel::except_channel(const cv::Mat& src, cv::Mat& dst, int channel) { - int rows = static_cast(src.total()); - cv::Mat src_temp(rows, 3, CV_8UC1, src.data); - cv::Mat dst_temp(rows, 1, CV_8UC1, dst.data); - - cv::Mat temp1, temp2; + cv::Mat mv[3]; + cv::split(src, mv); + cv::Mat mask, mask1, mask2; switch (channel) { case 0: - temp1 = src_temp(cv::Rect(1, 0, 1, rows)); - temp2 = src_temp(cv::Rect(2, 0, 1, rows)); - cv::addWeighted(temp1, 0.587, temp2, 0.299, 0, dst_temp); + mask1 = mv[0] - mv[1]; + mask2 = mv[0] - mv[2]; break; case 1: - temp1 = src_temp(cv::Rect(0, 0, 1, rows)); - temp2 = src_temp(cv::Rect(2, 0, 1, rows)); - cv::addWeighted(temp1, 0.114, temp2, 0.299, 0, dst_temp); + mask1 = mv[1] - mv[0]; + mask2 = mv[1] - mv[2]; break; case 2: - temp1 = src_temp(cv::Rect(0, 0, 1, rows)); - temp2 = src_temp(cv::Rect(1, 0, 1, rows)); - cv::addWeighted(temp1, 0.114, temp2, 0.587, 0, dst_temp); + mask1 = mv[2] - mv[1]; + mask2 = mv[2] - mv[0]; break; default: break; } + cv::min(mask1, mask2, mask); + + cv::cvtColor(src, dst, cv::COLOR_BGR2GRAY); + dst -= mask; } -void CImageApplyChannel::colourless(const cv::Mat &src, cv::Mat &dst, uchar threshold) +void CImageApplyChannel::colourless(const cv::Mat& src, cv::Mat& dst, uchar threshold) { - if (src.channels() != 3) - { - dst = src; - return; - } + if (src.channels() != 3) + { + dst = src; + return; + } - cv::Mat hsv; - cv::cvtColor(src, hsv, cv::COLOR_BGR2HSV_FULL); - cv::Mat mv_hsv[3]; - cv::split(hsv, mv_hsv); - size_t total = mv_hsv[1].total(); - uchar* ptr_s = mv_hsv[1].data; - uchar* ptr_v = mv_hsv[2].data; - for (size_t i = 0; i < total; i++) - if (ptr_s[i] > threshold) - { - ptr_s[i] = 0; - ptr_v[i] = 255; - } - cv::merge(mv_hsv, 3, hsv); - cv::cvtColor(hsv, hsv, cv::COLOR_HSV2BGR_FULL); - cv::cvtColor(hsv, dst, cv::COLOR_BGR2GRAY); + cv::Mat hsv; + cv::cvtColor(src, hsv, cv::COLOR_BGR2HSV_FULL); + cv::Mat mv_hsv[3]; + cv::split(hsv, mv_hsv); + size_t total = mv_hsv[1].total(); + uchar* ptr_s = mv_hsv[1].data; + uchar* ptr_v = mv_hsv[2].data; + for (size_t i = 0; i < total; i++) + if (ptr_s[i] > threshold) + { + ptr_s[i] = 0; + ptr_v[i] = 255; + } + cv::merge(mv_hsv, 3, hsv); + cv::cvtColor(hsv, hsv, cv::COLOR_HSV2BGR_FULL); + cv::cvtColor(hsv, dst, cv::COLOR_BGR2GRAY); } diff --git a/hgdriver/ImageProcess/ImageApplyChannel.h b/hgdriver/ImageProcess/ImageApplyChannel.h index 1b54d44..19d8a26 100644 --- a/hgdriver/ImageProcess/ImageApplyChannel.h +++ b/hgdriver/ImageProcess/ImageApplyChannel.h @@ -7,7 +7,8 @@ * 最近修改时间:v1.0 2020/4/21 v1.1 2020/6/11 在除红时,增加对比度,提高除色效果。 v1.2 2020/7/21 修正之前增强红绿蓝效果的色彩配比。 - * 版本号:v1.2 + v1.3 2021/5/24 替换红色增强算法方案。 + * 版本号:v1.3 * ==================================================== */ diff --git a/hgdriver/ImageProcess/ImageApplyRefuseInflow.h b/hgdriver/ImageProcess/ImageApplyRefuseInflow.h index ae3b116..346c755 100644 --- a/hgdriver/ImageProcess/ImageApplyRefuseInflow.h +++ b/hgdriver/ImageProcess/ImageApplyRefuseInflow.h @@ -1,11 +1,11 @@ /* * ==================================================== - * ���ܣ�����͸��ԭ��Ϊ�˲� - * ���ߣ�����ά - * ����ʱ�䣺2020/4/21 - * ����޸�ʱ�䣺2020/4/21 - * �汾�ţ�v1.0 + * 17171711171717171706171709171702170217 + * 17171713171717171704 + * 171717170217422020/4/21 + * 1717171710170217422020/4/21 + * 17ڄ170017v1.0 * ==================================================== */