Created
October 22, 2020 09:23
-
-
Save robosina/649ff569a4add6ba946a2a540f859fdb to your computer and use it in GitHub Desktop.
MotionBlur in opencv c++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <opencv2/opencv.hpp> | |
using namespace cv; | |
#include <assert.h> | |
//#define normal | |
void CreateKernel(cv::Mat& kernel, | |
int KernelSize, | |
float angle /*angle is in degree format*/); | |
void motionBlur(cv::InputArray src,cv::Mat & dst,int angle,int kernel_size); | |
int main() | |
{ | |
cv::Mat img = cv::imread("/home/isv/Documents/segment/original/1.jpg"); | |
cv::Mat dst; | |
int angle=30; | |
int kernelSize=20; | |
motionBlur(img,dst,angle,kernelSize); | |
} | |
void CreateKernel(cv::Mat& kernel, | |
int KernelSize, | |
float angle /*angle is in degree format*/){ | |
kernel=cv::Mat(KernelSize,KernelSize,CV_32FC3,0.0); | |
assert(angle>=0 && angle<=180); | |
auto dcot = [](float & angle_degree){ | |
double rad = std::tan(angle_degree*CV_PI/180.0); | |
return (1.0/rad); | |
}; | |
cv::Point p1,p2; | |
if(angle==0 | angle==180){ | |
p1=cv::Point(KernelSize,KernelSize/2); | |
p2=cv::Point(0,KernelSize/2); | |
}else if(angle==90){ | |
p1=cv::Point(KernelSize/2,0); | |
p2=cv::Point(KernelSize/2,KernelSize); | |
}else{ | |
float x1 = dcot(angle)*(KernelSize/2)+KernelSize/2; | |
float x2 = -dcot(angle)*(KernelSize/2)+KernelSize/2; | |
p1=cv::Point(x1,0); | |
p2=cv::Point(x2,KernelSize); | |
} | |
cv::line(kernel,p1,p2,cv::Scalar(1,1,1),1,cv::LINE_8); | |
cv::multiply(kernel,(float) 1.0/KernelSize,kernel); | |
} | |
void motionBlur(cv::InputArray src,cv::Mat & dst,int angle,int kernel_size){ | |
cv::Mat kernel; | |
CreateKernel(kernel,kernel_size,angle); | |
cv::filter2D(src,dst,CV_32FC3,kernel); | |
dst.convertTo(dst,CV_8UC3); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment