mat opencv 修改roi_opencv截图选取ROI总结

本文介绍了使用OpenCV进行图像处理时如何选择ROI区域的方法,包括矩形截图和任意形状截图。通过`Rect`对象创建矩形ROI,以及使用`Range`截取特定行列的图像。同时,还提供了一种通过绘制轮廓来截取任意形状图像的例子,但这种方法适用于全图覆盖,若要截取更小部分需结合矩形切图。
摘要由CSDN通过智能技术生成

我们在今天图像处理的时候,免不了会对图像进行截图,选取适合工程的roi,opencv给我们提供了多种选择的截图方式,包括矩形截图(这是比较常用的方式,操作也比较简单,有直接的函数可以进行调用),任意的roi(这种方式相对来说不是特别简单,没有直接的函数进行调用)下面进行总结一下常用的几种方式。

1.矩形截图

Mat image= imread(image);

Rect rect(10, 10, 20, 2);

Mat image_roi = image(rect);

其中:Rect的函数定义为: Rect(_Tp _x, _Tp _y, _Tp _width, _Tp _height);

_Tp _x:表示矩形左上角顶点的x坐标; _Tp _y:表示矩形左上角顶点的y坐标;

_Tp _width:表示矩形框的宽度 ; _Tp _height:表示矩形框的高度

2.矩形截图的另一种方式

Mat image= imread(image);

Mat imgROI1 = image(Range(190, 400), Range(80, 550));

其中190为起始像素行,400为终点像素行,80为起始像素列,550为终止像素列。

3.任意图像的roi截取

int changeImg(Mat img1,Mat &dst)

{

cout<

Mat roi = Mat::zeros(img1.size(),CV_8U);

vector> contour_left;

vector pts_left;

pts_left.push_back(Point(262,277));

pts_left.push_back(Point(277,20));

pts_left.push_back(Point(257,16));

pts_left.push_back(Point(248,255));

//pts.push_back(Point(50,250));

contour_left.push_back(pts_left);

drawContours(roi,contour_left,0,Scalar::all(255),-1);

img1.copyTo(dst,roi);

}

int main()

{

Mat dst, das;

int status1 = 0,status2 = 0,status3 = 0;

//输入图像

Mat img1 = imread("./1.jpg");

Mat img2 = imread("./2.jpg");

changeImg(img1,dst);

changeImg(img2,das);

return 0;

}

只能截取整张图片的roi,部分的不能进行,如果想要比较小的图片,还是要在此基础上进行矩形切图

声明:本文为原创,作者为 lijingle,转载时请保留本声明及附带文章链接:https://www.lijl888.com/archives/117

感谢您的支持

感谢您的支持

感谢您的支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值