ROI感兴趣区域

机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在图像处理领域,感兴趣区域(ROI) 是从图像中选择的一个图像区域,这个区域是你的图像分析所关注的重点。圈定该区域以便进行进一步处理。使用ROI圈定你想读的目标,可以减少处理时间,增加精度。

获取图片的感兴趣区域

//获取图片
    UIImage * image1 = [UIImage imageNamed:@"lena.png"];

    Mat src_image,imageROI;
    //转换成Mat数据
    UIImageToMat(image1, src_image);
    //原图的尺寸是 320*480
    //src_image.cols 列数 相当于图片的宽度
    //src_image.rows 行数 相当于图片的高度
    imageROI = src_image(cv::Rect(0,0,src_image.cols,320.0));
    UIImage * tmpImage = MatToUIImage(imageROI);
    self.imageV.image = tmpImage;

opencv roi旋转 opencv roi区域_感兴趣区域

图片的叠加与混合

Mat src_image;
    Mat logo_image;
    //底图
    UIImage* image = [UIImage imageNamed:@"1.jpg"];
    UIImageToMat(image, src_image);
    //logo图片
    UIImage * image2 = [UIImage imageNamed:@"data_logo.png"];
    UIImageToMat(image2, logo_image);
    //定义感兴趣区域
    Mat imageROI = src_image(cv::Rect(100,100,logo_image.rows,logo_image.cols));
    //复制到感兴趣区域
    logo_image.copyTo(imageROI,logo_image);

    UIImage * tmpImage = MatToUIImage(src_image);

    self.imageV.image = tmpImage;

opencv roi旋转 opencv roi区域_ROI_02

线性图片混合与叠加

/*
第一个参数src1: InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat
第二个参数alpha: 表示第一个数组的权重
第三个参数src2:表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
第四个参数beta: 表示第二个数组的权重值
第五个参数dst: 输出的数组,它和输入的两个数组拥有相同的尺寸和通道数
第六个参数gamma: 一个加到权重总和上的标量值
第七个参数dtype: 输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()
//矩阵的表达式:
dst = src1*alpha + src2*beta + gamma;
*/
void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype = -1);

线性图片叠加:

Mat cv_image1,cv_image2;
    UIImage * image1 = [UIImage imageNamed:@"data_logo.png"];
    UIImageToMat(image1, cv_image1);

    UIImage * image2 = [UIImage imageNamed:@"wall.jpg"];
    UIImageToMat(image2, cv_image2);

    Mat out_Image;
    //cv_image1 与  cv_image2 需要相同的尺寸大小
    addWeighted(cv_image1, 0.8, cv_image2, 0.8, 0.0, out_Image);
    UIImage * tmpImage = MatToUIImage(out_Image);

    self.imageV.image = tmpImage;

opencv roi旋转 opencv roi区域_openCV_03

ROI加图片线性混合

感兴趣区域ROI 实现自定义区域的线性混合

Mat src_image , logo_image;
    UIImage * image1 = [UIImage imageNamed:@"star.png"];
    UIImage * image2 = [UIImage imageNamed:@"data_logo.png"];

    UIImageToMat(image1, src_image);
    UIImageToMat(image2, logo_image);



    Mat imageROI;
    imageROI = src_image(cv::Rect(10,10,logo_image.rows,logo_image.cols));
    Mat out_image;
    addWeighted(imageROI, 0.3, logo_image, 0.5 , 0, imageROI);

    UIImage * tmpImage = MatToUIImage(src_image);

    self.imageV.image = tmpImage;

opencv roi旋转 opencv roi区域_openCV_04