opencv学习笔记(十六)利用cvGetSubRect截取图像
来源:互联网 发布:靠谱买小样的淘宝店 编辑:程序博客网 时间:2024/06/11 08:47
16.0cvGetSubRect()
该函数的定义是:
CvSize cvGetSubRect(//返回选择区域的尺寸
const CvArr* arr,//目标矩阵
CvArr* submat,//矩阵指针
CvRect rect//选择区域
);
其中CvRect见上一篇博客。
ps:切勿在使用submat前初始化变量,不然会造成内存溢出。
实例代码:
#include <cv.h>#include <highgui.h>int main() { IplImage *res; int subX = 0; int subY = 0; res = cvLoadImage("a.jpg",-1); subX = res->width / 2; subY = res->height / 2; CvMat *pMat = cvCreateMatHeader(subX, subY,CV_8UC3); //创建一个长宽均是原图像的1/2的矩阵头 CvRect rect = cvRect(0, 0, subX, subY); //要截取的区域与创建的矩阵大小一样 cvGetSubRect(res, pMat, rect); //res为指向图像的指针,pMat指向存储所截图像的矩阵,返回值和pMat相等 IplImage *pSubImg = cvCreateImageHeader(cvSize(subX, subY), 8, 1); //创建一个长宽均是原图像的1/2的图像头 cvGetImage(pMat, pSubImg); //pMat为存储数据的矩阵,pSubImg指向图像,返回值与pSubImg相等 cvShowImage("所截图像",pSubImg); cvShowImage("原图像", res); cvWaitKey(0); return 0;}
16.1 cvGetImage
定义:
IplImage* cvGetImage( const CvArr* arr, IplImage* image_header )
作用:
可以把刚才存入矩阵的数据转存为图像。把CvMat *传给arr;image_header只需为图像头就行,不用分配数据存储空间 ;返回所存图像的指针。
16.2 cvCreateMatHeader()
定义:
CvMat* cvCreateMatHeader( int rows, int cols, int type );
rows
矩阵行数。
cols
矩阵列数。
type
矩阵元素类型。
通常以 CV_<比特数>(S|U|F)C<通道数>型式描述, 例如:
CV_8UC1 意思是一个8-bit 无符号单通道矩阵, CV_32SC2 意思是一个32-bit 有符号二个通道的矩阵。
作用:
创建CvMat结构,不为数据分配内存。
程序理解
IplImage *pSubImg = cvCreateImageHeader(cvSize(subX, subY), 8, 1);
其中的cvCreateImageHeader是创建一个图像头,不为数据分配内存。
CvMat *pMat = cvCreateMatHeader(subX, subY,CV_8UC3);
是创建一个矩阵头。
然后发现一个事儿,创建图像头和矩阵头时,不需要和Load的图像的通道数和位数以及大小一致,而且,图像头和矩阵头的大小以及通道数和位数都不需要一致。但是最后显示的图像大小就是我们所截取的图像。
个人感觉可能是因为创建的都是“头”,不需要为分配空间存储数据,所以这些都无所谓了。
然后我把
cvCreateMatHeader改成了cvCreateMat
cvCreateImageHeader改成了cvCreateImage
上述结果一样成立。
——呵呵。
别管为什么了。
- opencv学习笔记(十六)利用cvGetSubRect截取图像
- 【OpenCV学习笔记】十六、图像阈值化
- 《学习opencv》笔记——矩阵和图像操作——cvGertDims,cvGetDimSize,cvGetRow,cvGetRow,cvGetSize and cvGetSubRect
- openCV学习笔记(8):利用cvSetImageROI截取/裁剪图片
- OpenCV学习笔记(18):在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- opencv学习笔记(十七)利用cvPyrSegmentation()做图像分割
- opencv学习笔记(十六)——图像对比度和亮度值
- 【OpenCV学习笔记】【函数学习】十六(Rect参数介绍)
- zynq-7000学习笔记(十六)——opencv采集USB摄像头图像
- OpenCV2学习笔记(十六):Stitching图像拼接
- OpenCV学习笔记(十六)——CamShift研究
- OpenCV学习笔记(十六)角点检测
- opencv学习笔记(二十六)直方图有关的操作
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
- opencv2学习笔记(二)-OpenCV如何扫描图像、利用查找表和计时
- opencv学习笔记(十五)利用cvSetImageROI()对图像部分区域进行操作
- 用截取的部分图像创建新图像--关于cvGetSubRect,cvGetImage的用法
- 用截取的部分图像创建新图像--关于cvGetSubRect,cvGetImage的用法
- Python多线程调用Hive接口的MapReduce示例
- birt表格样式调整
- opencv需要目录和库
- PHP 的命令行模式
- Python解析JSON数据的基本方法
- opencv学习笔记(十六)利用cvGetSubRect截取图像
- SQL利用Case When Then多条件判断
- 使用C++遍历文件夹/目录
- 码农的2016小结
- vue(4)
- 删除元素
- java学习必读八大经典书籍
- 数据科学完整学习路径【附学习资源推荐】
- 69. JPA实体Bean的生命周期