OPENCV图像处理基础(二)感兴趣区域ROI
2016-03-12 22:04
423 查看
说到图像的感兴趣区域,玩过微博的对水印不陌生吧,水印就是感兴趣区域的一种用法。
今天就在这里演示一下如何上水印。其实其思路就是,在源图片(要被上水印的图)中画划出一片区域,然后在用水印图(不一定要是文字,任意图片都可以)覆盖到那个划出来的区域。
用到的素材(取自:《OpenCV计算机视觉编程》非广告哈):
以下是效果图:
至于水印为什么在左上角,而不是右下角。在看一遍代码就知道啦。
注:本人才疏学浅,欢迎指正
今天就在这里演示一下如何上水印。其实其思路就是,在源图片(要被上水印的图)中画划出一片区域,然后在用水印图(不一定要是文字,任意图片都可以)覆盖到那个划出来的区域。
用到的素材(取自:《OpenCV计算机视觉编程》非广告哈):
#include<iostream> #include<opencv2\opencv.hpp> using namespace std; using namespace cv; int main() { namedWindow("感兴趣区域"); Mat orignimg = imread("beach.jpg");//读取源图 Mat logoimg = imread("logo.jpg");//读取水印图 Mat imgroi = orignimg(Rect(30,30, logoimg.cols, logoimg.rows));//设置orign图片上坐标为(100,100),长宽和logoimg相等的区域为感兴趣区域。其实就是在源图片中划出一片区域作为感兴趣区域,因为Mat类型单纯赋值是一种浅拷贝,数据域是共享的,所以通过修改imgroi可以直接影响orignimg的数据。 //PS:Mat,Rect ,Point数据结构的坐标原点都是在左上角。如果是笛卡尔坐标系死粉,建议自己撸个顺序遍历输出二维数组的程序可以有助于接受这种安排。 ///opencv3中的行数对应于以前版本的高度height,列数对应宽度。这里要特别注意如果,弄反了会出不了效果! logoimg.copyTo(imgroi,logoimg);//这里是深拷贝,直接把logoimg水印图复制到imgroi的数据域 //输出一些信息 cout << "orignimg的行数:" << orignimg.rows << "列数:" << orignimg.cols << endl; cout << "logoimg的行数:" << logoimg.rows << "列数:" << logoimg.cols << endl; imshow("感兴趣区域", orignimg); waitKey(0); return 0; }
以下是效果图:
至于水印为什么在左上角,而不是右下角。在看一遍代码就知道啦。
注:本人才疏学浅,欢迎指正
相关文章推荐
- 正则表达式
- 网站缓存技术
- tomcat war包解压规则
- linux shell命令shift
- apache 环境的搭建
- 学习OpenCV2——绘制基本图形及文字
- Openstack 03 - Nova Compute
- TC SRM 684 Div2 900pts
- linux下gdb调试器使用学习-01
- 10934 - Dropping water balloons(DP)
- tomcat如何利用自带工具查看tomcat信息
- Linux内核分析第三周——构造一个简单的Linux系统MenuOS
- Linux文件查找工具之find(详解)
- htop的使用
- centos7没有安装ifconfig命令的解决方法
- OPENCV第一篇
- zabbix yum安装
- 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS
- org.apache.jasper.JasperException: Unable to compile class for JSP:
- linux进程间通信——共享内存