OpenCV实现批量图片加水印
2011-11-30 21:16
501 查看
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.
简单意义的打水印无非就是加个文字
还有就是遍历目录下文件,获得文件名,这样才能批量
剩下的用vector就可以
运行效果
打水印后的图片
用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++)));
运行效果
打水印后的图片
相关文章推荐
- GO语言实现批量压缩图片和水印
- python通过opencv实现批量剪切图片
- Android OpenCV实现图片叠加,水印
- Java使用OpenCV实现人脸识别/人眼检测/图片截取/合成/添加水印
- Android OpenCV实现图片叠加,水印
- OPENCV批量读取图片实现方法
- linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法
- Android OpenCV实现图片叠加,水印
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- opencv实现对图片的批量读取、处理、存储
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- Thumbnailator java图片压缩,加水印,批量生成缩略图
- C#winform批量给图片加水印代码
- PHP实现随机生成水印图片功能
- php实现多张图片上传加水印技巧
- ASP.NET中实现在图片上打水印
- Python下OpenCV批量调整图片大小——整理分团委资料的小技巧