叁[3],感兴趣区域ROI

1,简介

ROI,感兴趣区域(region of interest),截取图像

2,获取方法

方法1:使用Rect

cpp 复制代码
cv::Mat src=cv::imread("*.bmp");//读取原图
cv::Mat matROI = src(cv::Rect(100,200,50,100));//截取原图,矩形区域

方法2:使用Range

cpp 复制代码
cv::Mat src=cv::imread("*.bmp");//读取原图
cv::Mat matROI = src(cv::Range(100,150),cv::Range(200,300));//截取原图,矩形区域

3,图像叠加

注:Mat类型中copyTo函数和clone函数和赋值操作符操作。

3.1.1,代码1(copyTo,类型+尺寸相同)

cpp 复制代码
stringstream ss;
cv::Mat src = cv::imread("BK5.jpg");//3通道彩图
cv::Mat* srcPointer = &src;
cv::Mat srcROI = src(cv::Rect(src.rows / 2 - 100, src.cols / 2 - 100, 100, 100));
ss << "src.isContinuous=" << src.isContinuous() <<endl;
ss << "src.type=" << src.type() << endl;
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::Mat srvROI_End = cv::Mat(srcROI.rows, srcROI.cols, srcROI.type(), cv::Scalar(0));
srvROI_End.copyTo(srcROI);
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::imshow("srcROI", srcROI);
cv::imshow("src-Result", src);
qDebug() << ss.str().c_str();

指针版

cpp 复制代码
stringstream ss;
cv::Mat src = cv::imread("BK5.jpg");//3通道彩图
cv::Mat srcROI = src(cv::Rect(src.rows / 2 - 100, src.cols / 2 - 100, 100, 100));
cv::Mat* srcROIPointer = &srcROI;
ss << "src.isContinuous=" << src.isContinuous() <<endl;
ss << "src.type=" << src.type() << endl;
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::Mat srcROI_End = cv::Mat(srcROIPointer->rows, srcROIPointer->cols, srcROIPointer->type(), cv::Scalar(0));
srcROI_End.copyTo(*srcROIPointer);
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::imshow("srcROI", *srcROIPointer);
cv::imshow("src-Result", src);
qDebug() << ss.str().c_str();

3.1.2,打印结果

src.isContinuous=1

src.type=16

srcROI - Memery Address:000000EF810FF980

srcROI - Memery Address:000000EF810FF980

3.1.3,图片显示结果

原图的ROI区域,图片被处理。

3.1.4,结论

类型/尺寸相同,copyTo时,ROI图元修改会生效到原图中。

3.2.1,代码2(copyTo,类型不同,尺寸相同)

cpp 复制代码
stringstream ss;
cv::Mat src = cv::imread("BK5.jpg");//3通道彩图
cv::Mat* srcPointer = &src;
cv::Mat srcROI = src(cv::Rect(src.rows / 2 - 100, src.cols / 2 - 100, 100, 100));
ss << "src.isContinuous=" << src.isContinuous() <<endl;
ss << "src.type=" << src.type() << endl;
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::Mat srvROI_End = cv::Mat(srcROI.rows, srcROI.cols, CV_8UC1, cv::Scalar(0));
srvROI_End.copyTo(srcROI);
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::imshow("srcROI", srcROI);
cv::imshow("src-Result", src);
qDebug() << ss.str().c_str();

3.2.2,打印结果

src.isContinuous=1

src.type=16

srcROI - Memery Address:000000EF810FF980

srcROI - Memery Address:000000EF810FF980

3.2.3,图片显示结果

原图的ROI区域,无处理效果。

3.2.4,结论

类型不同,尺寸相同,copyTo时,ROI图元不会生效到原图中。

3.3.1,代码2(copyTo,类型不同,尺寸相同)

cpp 复制代码
stringstream ss;
cv::Mat src = cv::imread("BK5.jpg");//3通道彩图
cv::Mat* srcPointer = &src;
cv::Mat srcROI = src(cv::Rect(src.rows / 2 - 100, src.cols / 2 - 100, 100, 100));
ss << "src.isContinuous=" << src.isContinuous() <<endl;
ss << "src.type=" << src.type() << endl;
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::Mat srvROI_End = cv::Mat(srcROI.rows+100, srcROI.cols+100, srcROI.type(), cv::Scalar(0));
srvROI_End.copyTo(srcROI);
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::imshow("srcROI", srcROI);
cv::imshow("src-Result", src);
qDebug() << ss.str().c_str();

3.3.2,打印结果

src.isContinuous=1

src.type=16

srcROI - Memery Address:000000FC6E10F8E0

srcROI - Memery Address:000000FC6E10F8E0

3.3.3,图片显示结果

原图的ROI区域,无处理效果。

3.3.4,结论

类型相同,尺寸不同,copyTo时,ROI图元不会生效到原图中。

3.4.1,代码2(clone,类型+尺寸相同)

cpp 复制代码
stringstream ss;
cv::Mat src = cv::imread("BK5.jpg");//3通道彩图
cv::Mat* srcPointer = &src;
cv::Mat srcROI = src(cv::Rect(src.rows / 2 - 100, src.cols / 2 - 100, 100, 100));
ss << "src.isContinuous=" << src.isContinuous() <<endl;
ss << "src.type=" << src.type() << endl;
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::Mat srcROI_End = cv::Mat(srcROI.rows, srcROI.cols, srcROI.type(), cv::Scalar(0));
srcROI = srcROI_End.clone();
ss << "srcROI - Memery Address:" << &srcROI << endl;
cv::imshow("srcROI", srcROI);
cv::imshow("src-Result", src);
qDebug() << ss.str().c_str();

3.4.2,打印结果

src.isContinuous=1

src.type=16

srcROI - Memery Address:00000006268FF560

srcROI - Memery Address:00000006268FF560

3.4.3,图片显示结果

原图的ROI区域,无处理效果。

3.4.4,结论

clone时,ROI图元不会生效到原图中。

4,制作掩膜

4.1.1,代码1(copyTo,mask)

绿色掩膜

cpp 复制代码
    stringstream ss;
    cv::Mat src = cv::imread("BK5.jpg");//3通道彩图
    cv::Mat srcROI = src(cv::Rect(src.rows / 2 - 100, src.cols / 2 - 100, 100, 100));
    cv::Mat* srcROIPointer = &srcROI;
    ss << "src.isContinuous=" << src.isContinuous() << endl;
    ss << "src.type=" << src.type() << endl;
    ss << "srcROI - Memery Address:" << &srcROI << endl;
    cv::Mat srcROI_End = cv::Mat(srcROIPointer->rows, srcROIPointer->cols, srcROIPointer->type(), cv::Scalar(0, 255, 0));
    cv::Mat srcROI_Mask = cv::Mat(srcROIPointer->rows, srcROIPointer->cols, srcROIPointer->type(), cv::Scalar(0, 255, 0));
    srcROI_End.copyTo(*srcROIPointer, srcROI_Mask);
    ss << "srcROI - Memery Address:" << &srcROI << endl;
    cv::imshow("srcROI", *srcROIPointer);
    cv::imshow("src-Result", src);
    qDebug() << ss.str().c_str();
相关推荐
loui robot12 分钟前
规划与控制之局部路径规划算法local_planner
人工智能·算法·自动驾驶
玄同76516 分钟前
Llama.cpp 全实战指南:跨平台部署本地大模型的零门槛方案
人工智能·语言模型·自然语言处理·langchain·交互·llama·ollama
格林威18 分钟前
Baumer相机金属焊缝缺陷识别:提升焊接质量检测可靠性的 7 个关键技术,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
独处东汉26 分钟前
freertos开发空气检测仪之按键输入事件管理系统设计与实现
人工智能·stm32·单片机·嵌入式硬件·unity
你大爷的,这都没注册了26 分钟前
AI提示词,zero-shot,few-shot 概念
人工智能
AC赳赳老秦27 分钟前
DeepSeek 辅助科研项目申报:可行性报告与经费预算框架的智能化撰写指南
数据库·人工智能·科技·mongodb·ui·rabbitmq·deepseek
瑞华丽PLM35 分钟前
国产PLM软件源头厂家的AI技术应用与智能化升级
人工智能·plm·国产plm·瑞华丽plm·瑞华丽
Ryan老房40 分钟前
无人机航拍图像标注-从采集到训练全流程
yolo·目标检测·机器学习·计算机视觉·目标跟踪·无人机
xixixi7777744 分钟前
基于零信任架构的通信
大数据·人工智能·架构·零信任·通信·个人隐私
玄同7651 小时前
LangChain v1.0+ Prompt 模板完全指南:构建精准可控的大模型交互
人工智能·语言模型·自然语言处理·langchain·nlp·交互·知识图谱