void playEffectsVideo(const char *videoPath,void(*fp)(Mat &,Mat &), const char *winname = "playing", int delay = 50){
VideoCapture capture;
capture.open(videoPath);
if (!capture.isOpened()) {
cout << "can't open video" << endl;
return;
}
Mat frame;
while (capture.read(frame)) {
fp(frame,frame);
imshow(winname, frame);
char c = waitKey(delay);
if (c == 27){
break;
}
}
}
void embossment(Mat &src,Mat &dst){
for(int i=1; i< src.rows-1; i++){
uchar *current = src.ptr<uchar>(i);
uchar *currentBefors = src.ptr<uchar>(i+1);
uchar *dstLine = dst.ptr<uchar>(i);
for(int j=0; j < src.cols; j++){
for(int k =0; k < 3; k++){
int tmp0 = current[3*j+k] - currentBefors[3*(j-1)+k]+128;
if(tmp0 < 0)
dstLine[3*j+k] = 0;
else if(tmp0 > 255)
dstLine[3*j+k] = 255;
else
dstLine[3*j+k]=tmp0;
}
}
}
src.copyTo(dst);
}
int main(int argc, char *argv[])
{
const char * path = "D:/video.mp4";
void(*fp)(Mat &,Mat &) = ca::embossment;
ca::playEffectsVideo(path,fp,"浮雕",5);
return 0;
}