opencv 设置任意形状的ROI的各种方法

按本方法设置的任意形状的ROI区域,不能带有修改的关联性,具体看代码。能有关联性的设置方法还没找到。。


#include "stdafx.h"
#include <opencv2\opencv.hpp>


int main()
{
	std::string imageName("C:\\scenery.jpg");
	cv::Mat src = cv::imread(imageName, CV_LOAD_IMAGE_UNCHANGED);

	// 第一种方法:rowRange colRange
	int rowBegin = 0, rowEnd = 100, colBegin = 0, colEnd = 100;
	cv::Mat roi1 = src.rowRange(rowBegin, rowEnd).colRange(colBegin, colEnd);
	roi1.setTo(0); // 对ROI操作会影响到原图(如希望不影响,可以在拷贝一份)
	cv::Mat roiCopy = roi1.clone(); // copyTo

	// 第二种方法:Rect
	int xOrigin = 100, yOrigin = 100, xWidth = 100, yHeight = 200;
	cv::Rect rectROI(xOrigin, yOrigin, xWidth, yHeight);
	cv::Mat roi2 = src(rectROI);
	roi2.setTo(128); // 对ROI操作会影响到原图
	
	// 第三种方法,针对不规则的 roi 区域:copyTo 该方法并不是真正意义的ROI,opencv不支持修改可影响原图的任意ROI
	cv::Mat mask = cv::Mat::zeros(src.size(), CV_8UC1);
	cv::circle(mask, cv::Point2i(500,500), 200, cv::Scalar(255), -1); // 把感兴趣的区域,设置成255,其余为0
	cv::Mat roi3;
	src.copyTo(roi3, mask); // 本质上是拷贝数据(或者使用"与"操作)
	// cv::Mat roi4 = src & mask; // 需要src是单通道
	roi3.setTo(255); // 不会对ROI操作会影响到原图


	return 0;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值