学习OpenCV:滤镜系列(4)——波浪:正弦

来源:互联网 发布:javascript实战 源码 编辑:程序博客网 时间:2024/05/17 02:14

==============================================

版权所有:小熊不去实验室CSDN博客

==============================================


#include <math.h>#include <opencv/cv.h>#include <opencv/highgui.h>using namespace cv;using namespace std;double angle;int deltaI=10;//波浪周期;int A=10;//波浪振幅;Mat src,img;static void onTrackbar(int, void*){int width=src.cols;int heigh=src.rows;angle = 0.0;for (int y=0; y<heigh; y++){int changeX = A*sin(angle);uchar *srcP = src.ptr<uchar>(y);uchar *imgP = img.ptr<uchar>(y);for (int x=0; x<width; x++){if(changeX+x<width && changeX+x>0)//正弦分布(-1,1){imgP[3*x]=srcP[3*(x+changeX)];imgP[3*x+1]=srcP[3*(x+changeX)+1];imgP[3*x+2]=srcP[3*(x+changeX)+2];}//每行开始和结束的空白区;else if(x<=changeX)       {imgP[3*x]=srcP[0];imgP[3*x+1]=srcP[1];imgP[3*x+2]=srcP[2];}else if (x>=width-changeX){imgP[3*x]=srcP[3*(width-1)];imgP[3*x+1]=srcP[3*(width-1)+1];imgP[3*x+2]=srcP[3*(width-1)+2];}}angle += ((double)deltaI)/100;}imshow("Waves map",img);}int main(){src = imread("D:/test4.jpg");src.copyTo(img);namedWindow("Waves map", 1);// create a toolbarcreateTrackbar("振幅", "Waves map", &A, 100, onTrackbar);createTrackbar("频率", "Waves map", &deltaI, 100, onTrackbar);// Show the imageonTrackbar(0, 0);waitKey();imwrite("D:/wave.jpg",img);}


原图:


波浪: