45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
|
#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)
|
||
|
{
|
||
|
}
|