OpenCV实现批量图片加水印

CSDN的博客没水印功能真不方便

用OPENCV简陋地实现了一下


才发现以前用的全都是C风格OpenCV,

而OpenCV的C接口与C++接口的差异真是非常大,今天这个程序一不小心用了C风格,在Cstring和C++string转换上琢磨了半天。

为了规范,又重新C++风写了一遍


其实就是个putText函数

针对C++的接口中putText函数定义为

void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )

参数为

  • img – 图像矩阵
  • text – string型 文字内容
  • org – 文字坐标,以左下角为原点
  • fontFace – 字体类型 (包括 FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX, FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, or FONT_HERSHEY_SCRIPT_COMPLEX,)
  • fontScale –字体大小
  • color – 字体颜色
  • thickness – 字体粗细
  • lineType – Line type. See the line for details.
  • bottomLeftOrigin – When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner.
简单意义的打水印无非就是加个文字

void logo(string filename) { if(filename.substr(filename.size()-4,4)!=".jpg") return; Mat img = imread(filename); cout<<"converting "<<filename<<" to "; putText(img, "blog.csdn.net/boksic" , Point(0, int(img.rows*0.9)), CV_FONT_HERSHEY_COMPLEX,img.cols/400, cvScalar(200, 200, 200, 0)); filename.insert(0,"new_"); cout<<filename<<endl; imwrite(filename,img); }
还有就是遍历目录下文件,获得文件名,这样才能批量

vector<string> get_filelist(char *foldname) { vector<string> flist; HANDLE file; WIN32_FIND_DATA fileData; char line[1024]; wchar_t fn[1000]; mbstowcs(fn,(const char*)foldname,999); file = FindFirstFile(fn, &fileData); FindNextFile(file, &fileData); while(FindNextFile(file, &fileData)){ wcstombs(line,(const wchar_t*)fileData.cFileName,259); flist.push_back(line); } return flist; }
剩下的用vector就可以 vector<string> filelist=get_filelist(".\\*.*"); for(vector<string>::iterator p=filelist.begin();p!= filelist.end();logo(*(p++)));
运行效果

打水印后的图片



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值