如何通过javacv实现图片去水印(附代码)
最近工作需求要做图片去水印的功能,研究了一段时间发现javacv能做这个功能,然后总结了一下。
首先导入maven
org.bytedeco javacv 1.4.3 org.bytedeco javacpp org.bytedeco.javacpp-presets flycapture org.bytedeco.javacpp-presets libdc1394 org.bytedeco.javacpp-presets libfreenect org.bytedeco.javacpp-presets libfreenect2 org.bytedeco.javacpp-presets librealsense org.bytedeco.javacpp-presets videoinput org.bytedeco.javacpp-presets tesseract org.bytedeco.javacpp-presets leptonica org.bytedeco.javacpp-presets flandmark org.bytedeco.javacpp-presets artoolkitplus org.bytedeco javacv-platform 1.4.3 org.bytedeco javacv org.bytedeco.javacpp-presets flycapture-platform org.bytedeco.javacpp-presets libdc1394-platform org.bytedeco.javacpp-presets libfreenect-platform org.bytedeco.javacpp-presets libfreenect2-platform org.bytedeco.javacpp-presets librealsense-platform org.bytedeco.javacpp-presets videoinput-platform org.bytedeco.javacpp-presets tesseract-platform org.bytedeco.javacpp-presets leptonica-platform org.bytedeco.javacpp-presets flandmark-platform org.bytedeco.javacpp-presets artoolkitplus-platform org.bytedeco.javacpp-presets ffmpeg 4.0.2-1.4.3
开始进行实现:
第一步:
前景背景求差法
#include#include #include #include"opencv2/photo/photo.hpp" #include usingnamespacestd; usingnamespacecv; intmain(intargc,char**argv) { cv::VideoCapturecap("C:/Users/zyy/Desktop/test_logs/test.mp4"); if(!cap.isOpened()) { cout<<"Failed!"< >frame; if(!frame.data) { cout<<"Over!"< 前景背景求差法 if(i>2&&i<=40) { cv::cvtColor(frame,result,CV_BGR2GRAY); cv::bitwise_and(result,mask,mask);// 前景背景求差法 inpaintMask1=mask; imwrite("C:/Users/zyy/Desktop/test_logs/www.jpg",inpaintMask1); } Matinpainted; inpaint(frame,inpaintMask,inpainted,8,CV_INPAINT_TELEA); imshow("inpaintedimage",inpainted); imshow("Frame",frame); imshow("Result",mask); //waitKey(); if(cv::waitKey(33)>=0)break; } i++; } waitKey(); return0; }
第二步:
logo和水印位置检测
#include#include"cv.h" #include"cxcore.h" #include"highgui.h" usingnamespacestd; intmain() { IplImage*src=cvLoadImage("C:/Users/zyy/Desktop/test_logs/22.jpg",0); IplImage*srcResult=cvLoadImage("C:/Users/zyy/Desktop/test_logs/22.jpg",3);//用来显示 IplImage*templat=cvLoadImage("C:/Users/zyy/Desktop/test_logs/yk2.jpg",0); IplImage*result; if(!src||!templat) { cout<<"打开图像失败"< width; srcH=src->height; templatW=templat->width; templatH=templat->height; if(srcW 第三步:
在已经求得掩膜图像的情况下,进行去logo操作。
staticStringvideo_path="D://video//videos//"; publicstaticvoidets(){ MatinpaintMask=newMat(); Matinpainted=newMat(); Mattemplate=imread("D://video//movie_10.jpg"); Matframe=newMat(); cvtColor(template,inpaintMask,COLOR_BGR2GRAY); VideoCapturecap=newVideoCapture("D://video//mp4//1553583032966-480p.mp4"); if(!cap.isOpened()) return; StringfileName=video_path+"VideoTest12.mp4"; Sizesize=newSize((int)cap.get(CV_CAP_PROP_FRAME_WIDTH),(int)cap.get(CV_CAP_PROP_FRAME_HEIGHT)); doublefps=cap.get(CV_CAP_PROP_FPS); VideoWritervw1=newVideoWriter(fileName,CV_FOURCC((byte)'D',(byte)'I',(byte)'V',(byte)'3'),fps/6,size,true); intstart=11; intend=20; for(inti=start;i上述的图像和MP4文件自己准备就可以。感兴趣的可以去测试了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。