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
发布了79 篇原创文章 · 获赞 42 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/s12117719679/article/details/88066588