opencv roi 操作

roi即感兴趣的区域。
以下代码将图片左上角的200*200的区域修改为黄色。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

typedef cv::Point3_<uchar> Pixel;

int main() {
	Mat img = imread("in.jpg", IMREAD_UNCHANGED);
	Mat subImg = img(Range(0, 200), Range(0, 200));
	if (img.empty()) {
		printf("No image data \n");
		return -1;
	}

	for (Pixel &p : cv::Mat_<Pixel>(subImg)) {
		p.x = 0;
		p.y = 255;
		p.z = 255;
	}
	imwrite("out.jpg", img);
	return 0;
}

或者使用Mat的copyTo函数:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main() {
	Mat img = imread("in.jpg", IMREAD_UNCHANGED);
	Mat subImg = img(Range(0, 200), Range(0, 200));
	Mat gray(200, 200, CV_8UC3, Scalar(0, 0, 255));
	if (img.empty()) {
		printf("No image data \n");
		return -1;
	}
	gray.copyTo(subImg);
	imwrite("out.jpg", img);
	return 0;
}

这样我们就可以将图像的某一区域替换为其他图像,如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main() {
	Mat img = imread("in.jpg", IMREAD_UNCHANGED);
	Mat subImg = img(Range(0, 200), Range(0, 200));
	Mat a200 = imread("a200.jpg", IMREAD_UNCHANGED);
	if (img.empty()) {
		printf("No image data \n");
		return -1;
	}
	a200.copyTo(subImg);
	imwrite("out.jpg", img);
	return 0;
}

上面操作的都是矩形,
那如果我们的roi是圆形或者其他图形,应该怎么操作呢?

你可能感兴趣的:(opencv,opencv,人工智能)