opencv中的图像区域复制

openCV作为已经成熟的开源库,很多操作它都已经有了高效,使用方便的方法。我的应用场景是这样的,从一张大图片中抠出一小部分,然后处理这一小部分后再放到大图像中。对于抠出来可以这样实现:

Rect rect = Rect( x, y, width, height);
Mat p = (Mat( src, rect)).clone();

利用src源图像的rect区域图像信息实例化一个新的Mat图像,并将这部分图像clone给这个新实例,不加上clone()的话新图像的data将指向src的data。这样之后将实现提取源图像中对角点(x,y)与(x+width, y+height)之间矩阵的图像部分到p中保存。

将小块的图像放入到大图像中,可以这样:

CvRect rect = CvRect( Rect(x, y, width, height));
src->copyTo(dst(rect));

用的是openCV的copyTo方法,原理是将(Mat *)src拷贝到dst的rect区域。

时间: 2024-10-14 20:05:47

opencv中的图像区域复制的相关文章

OpenCV中感兴趣区域的选取与检测(一)

1.感兴趣区域的选取 感兴趣区域(Region of Interest, ROI)的选取,一般有两种情形:1)已知ROI在图像中的位置:2)ROI在图像中的位置未知. 1)第一种情形 很简单,根据ROI的坐标直接从原图抠出,不过前提是要知道其坐标,直接上例子吧. int getROI(Mat image, Rect rect) { Mat img=image.clone(); Mat roi; int cols=img.cols, rows=img.rows; //ROI越界,返回 if(col

opencv中感兴趣区域以及mask的使用

在图像处理的过程中,我们时常需要对指定区域或目标进行操作,这个区域我们称之为感兴趣区域.在学习opencv的初级阶段,对于感兴趣区域的操作方法是必须要掌握的. 比如下图: 我们获取到一帧图像Img,它里面有两个目标,一个蓝色块和一个红色块,我们一般会经常碰到以下三种情况: (1)我们希望将Img中的蓝色目标提取出来并另存为一个图像: (2)我们希望将Img中不是蓝色目标的其他目标都隐藏起来,只显示蓝色目标,或只对蓝色目标的区域进行图像处理. (3)我们只希望对Img中红色目标区域进行处理. 我们

OpenCV中Mat,图像二维指针和CxImage类的转换

在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转换和相应的对应关系. 一.OpenCV的Mat类到图像二值指针的转换 以下为函数代码: unsigned char** MatTopImgData(Mat img) { //获取图像参数 int row = img.rows; int col = img.cols; int band = img.c

OpenCV中对图像进行二值化的关键函数——cvThreshold()。

函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); 函数说明: 第一个参数表示输入图像,必须为单通道灰度图. 第二个参数表示输出的边缘图像,为单通道黑白图. 第三个参数表示阈值 第四个参数表示最大值. 第五个参数表示运算方法. 在OpenCV的imgproc\types_c.h中

C++&OpenCV中读取图像到数组的两种

///method 1 read the image data one by one for (int row = 0, i = 0;row < imgDst.rows;row++) { for (int col = 0;col < imgDst.cols;col++) { cout << setw(3) << (int)imgDst.at<uchar>(row, col) << " "; arr[i] =imgDst.at&

opencv中的meanshift图像切割

Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法.Meanshift不仅能够用于图像滤波,视频跟踪,还能够用于图像切割. 通过给出一组多维数据点,其维数是(x,y,r,g,b),均值漂移能够用一个窗体扫描空间来找到数据密度最大的区域,能够理解为数据分布最集中的区域. 在这里须要注意,因为空间位置(也就是上面的x和y)的变化范围与颜色的变化范围(上面的r,g,b)有极大的不同,所以,meanshift对这两个维数要採用不同的窗体半径.在opencv自带的means

Opencv中图像的遍历与像素操作

Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0代表黑,255代表白):对于彩色图像,每个像素是一个三元向量,即由三个8位无符号数来表示三个颜色通道(Opencv中顺次为蓝.绿.红). 我们先来介绍下cv::Mat类的获取像素的成员函数at(),其函数原型如下: template<typename _Tp> _Tp& at(int i0

opencv中Mat类型数据操作与遍历

Mat作为opencv中一种数据类型常常用来存储图像,相对与以前的IplImgae类型来说,Mat类型省去了人工的对内存的分配与释放,转而自动分配释放.Mat Class主要包括两部个数据部分:一个是matrix header(包括matrix的大小尺寸,储存方法,储存地址等等..),另一个是指向存储像素值的矩阵的指针. Opencv中对Mat的复制分为两种, Mat A, C; // creates just the header parts A = imread(argv[1], CV_LO

opencv中Mat与IplImage,CVMat类型之间转换

opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型较CvMat和IplImage有更强的矩阵运算能力,支持常见的矩阵运算(参照Matlab中的各种矩阵运算),所以将IplImage类型和CvMat类型转换为Mat类型更易于数据处理. Mat类型可用于直接存储图像信息,通过函数imread.imwrite.imshow等实现(与Matlab中的函数相