OpenCV-ROI 提取图像的特定区域,移动到新的位置

原理:

1、先提取Mat的特定区域

// 提取原图区域
    cv::Mat matRoiTmp = cv::Mat(mat, cv::Rect(100,100,150,100));

2、提取新图的区域,然后把上面提取出来的区域像素,复制到这个区域里面

    // 提取新图区域
    cv::Mat roiTmp = cv::Mat(roiMat, cv::Rect(100,200,150,100));
    
    // 区域复制
    matRoiTmp.copyTo(roiTmp);

 

完整代码:

c++版本

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
	Mat src, roi;
	src = imread("C:/Users/andy.ke/Desktop/qietu/image/test.png");

	namedWindow("原图", WINDOW_AUTOSIZE);
	imshow("原图", src);

	roi = Mat(src, Rect(100, 200, 100,100));

	namedWindow("提取", WINDOW_AUTOSIZE);
	imshow("提取", roi);

	// 新建一张一样的图片
    Mat newSrc;
	newSrc.create(src.rows, src.cols, src.type());
	src.copyTo(newSrc);

	// 提取这个图片的某个区域
	Mat tmp = Mat(newSrc, Rect(50, 50, 100, 100));

	// 把另一个图片的截图放进这个区域里面
	roi.copyTo(tmp);


	namedWindow("合成图", WINDOW_AUTOSIZE);
	imshow("合成图", newSrc);

	waitKey(0);
	return 0;
}

 

IOS版本

//
//  ViewController.m
//  opencv提取图片的某个区域
//
//  Created by TEE on 2019/3/1.
//  Copyright © 2019 TEE. All rights reserved.
//

#import "ViewController.h"
#import <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import "UIImage+OpenCV.h"
#import "OpenCV.h"
#import <opencv2/imgcodecs/ios.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImage *image = [UIImage imageNamed:@"fengjing"];
    

    cv::Mat roiMat, mat;

    UIImageToMat(image, mat);
    
    UIImageView *iv = [[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 300, 300)];
    UIImage *yuanimage = MatToUIImage(mat);
    iv.image = yuanimage;
    [self.view addSubview:iv];
    
    
    // 创建对象
    roiMat.create(mat.cols, mat.rows, mat.type());
    mat.copyTo(roiMat);
    
    // 提取原图区域
    cv::Mat matRoiTmp = cv::Mat(mat, cv::Rect(100,100,150,100));
    
    // 提取新图区域
    cv::Mat roiTmp = cv::Mat(roiMat, cv::Rect(100,200,150,100));
    
    // 区域复制
    matRoiTmp.copyTo(roiTmp);
    
    UIImage *newimage = MatToUIImage(roiMat);
    
    UIImageView *iv1 = [[UIImageView alloc]initWithFrame:CGRectMake(50, 500, 300, 300)];
    iv1.image = newimage;
    [self.view addSubview:iv1];
    
}

@end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值