code_device/hgdriver/ImageProcess/ImageApplyDispersion.cpp

45 lines
1.2 KiB
C++
Raw Normal View History

2022-07-29 08:41:34 +00:00
#include "ImageApplyDispersion.h"
CImageApplyDispersion::CImageApplyDispersion(float a, float b, float c, float sharpen)
: CImageApply()
, m_kernal_b(3, 1, CV_32FC1)
, m_kernal_g(3, 1, CV_32FC1)
, m_kernal_r(3, 1, CV_32FC1)
{
m_kernal_b.at<float>(0, 0) = a;
m_kernal_b.at<float>(1, 0) = 1.0f + sharpen - a;
m_kernal_b.at<float>(2, 0) = -sharpen;
m_kernal_g.at<float>(0, 0) = b;
m_kernal_g.at<float>(1, 0) = 1.0f + sharpen - b;
m_kernal_g.at<float>(2, 0) = -sharpen;
m_kernal_r.at<float>(0, 0) = c;
m_kernal_r.at<float>(1, 0) = 1.0f + sharpen - c;
m_kernal_r.at<float>(2, 0) = -sharpen;
}
CImageApplyDispersion::~CImageApplyDispersion()
{
}
void CImageApplyDispersion::apply(cv::Mat& pDib, int side)
{
(void)side;
if (pDib.channels() != 3) return;
cv::Mat bgr[3];
cv::split(pDib, bgr);
cv::filter2D(bgr[0], bgr[0], bgr[0].depth(), m_kernal_b);
cv::filter2D(bgr[1], bgr[1], bgr[1].depth(), m_kernal_g);
cv::filter2D(bgr[2], bgr[2], bgr[2].depth(), m_kernal_r);
cv::merge(bgr, 3, pDib);
}
void CImageApplyDispersion::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
{
}