叁[3],感兴趣区域ROI
1,简介
ROI,感兴趣区域(region of interest),截取图像
2,获取方法
方法1:使用Rect
cv::Mat src=cv::imread("*.bmp");//读取原图
cv::Mat matROI = src(cv::Rect(100,200,50,100));//截取原图,矩形区域
方法2:使用Range
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,类型+尺寸相同)
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();
指针版
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,类型不同,尺寸相同)
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,类型不同,尺寸相同)
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,类型+尺寸相同)
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)
绿色掩膜
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();
相关文章:
叁[3],感兴趣区域ROI
1,简介 ROI,感兴趣区域(region of interest),截取图像 2,获取方法 方法1:使用Rect cv::Mat srccv::imread("*.bmp");//读取原图 cv::Mat matROI src(cv::Rect(100,200,50,100));//截取原图&am…...
文件数据交换格式说明
对于文件的说明 二进制文件和文本文件的对比 对比项二进制文件文本文件定义二进制文件直接由二进制数字0和1组成,不存在统一的字符编码。文本文件是基于字符编码的文件,一般采用定长编码方式,如ASCII编码、UNICODE编码。优势1. 存储利用率高…...
2023NOIP A层联测24 总结
T1 给出树的一度点和三度点的数量,构造树的形态,节点数不超过 2000 2000 2000。我考虑先构造出三度点,发现这一度点至少是三度点2,打完后测样例不对,发现加一度点时要特判是否为三度点,花 5min 打完&#…...
vue3 项目如何配置测试环境打包
vue3 项目如何配置测试环境打包 根目录下创建.env.staging # 测试环境 NODE_ENV staging VUE_APP_MODE staging VUE_APP_TITLE 系统名称# 测试环境API接口地址 VUE_APP_API_URL 接口地址package.json文件中 scripts配置中添加以下代码 "scripts": {"serve&q…...
【CSS】样式的计算过程
标签的 CSS 样式 现在有这么一段 HTML 代码: <div class"test"><h1>Hello World</h1> </div>目前我们没有给 h1 设置任何样式,可以看到 h1 自带了一些样式,eg:font-size、font-weight、margi…...
【ArcGIS微课1000例】0076:KMZ转换KML的方法
文章目录 ArcGIS转kmzkmz转kmlArcGIS转kmz ArcGIS可以很方便的将dwg,shp、等矢量数据转为kmz。 拓展阅读: 【ArcGIS微课1000例】0075:将AutoCAD(Dwg、Dxf)文件转换为shp、KML(kml、kmz)文件...

Python基础入门例程46-NP46 菜品的价格(条件语句)
最近的博文: Python基础入门例程45-NP45 禁止重复注册(条件语句)-CSDN博客 Python基础入门例程44-NP44 判断列表是否为空(条件语句)-CSDN博客 Python基础入门例程43-NP43 判断布尔值(条件语句࿰…...

Docker数据管理、网络与Cgroup资源限制
目录 一、Docker的数据管理 1、数据卷 2、数据卷容器 3、端口映射 4、容器互联 二、Docker网络 2.1Docker网络实现原理 2.2Docker 的网络模式 3.3网络模式详解: host模式 container模式 none模式 bridge模式 自定义网络 创建自定义网络 三、Cgroup资源…...
ubuntu strings | grep使用说明
例子1 查找/bin/ls路径中中,包含libc的字符串,不区分大小写: strings /bin/ls | grep -i libc strings /bin/ls | grep -i libcstrings表示查找字符/bin/ls表示路径| grep表示抓取 -i 表示不区分大小写libc表示要查询的内容 例子2 strings …...

<Vue>使用依赖注入的方式共享数据
什么是vue依赖注入? Vue是一个用于构建用户界面的渐进式框架。 它提供了一种简单而灵活的方式来管理组件之间的数据流,即依赖注入(Dependency Injection,DI)。 依赖注入是一种设计模式,它允许一个组件从另一…...

从0到1:腾讯云服务器使用教程
腾讯云服务器入门教程包括云服务器CPU内存带宽配置选择,选择云服务器CVM或轻量应用服务器,云服务器创建后重置密码、远程连接、搭建程序环境等,腾讯云服务器网txyfwq.com分享从0到1腾讯云服务器入门教程: 目录 腾讯云服务器入门…...

VScode + opencv + c++ + win配置教程
准备: 1、下载opencv 2、下载MinGw 3、 3、下载CMake 下载完解压放到一个文件夹里面,便于环境管理,文件夹我重命名了,解压出来文件名不一样正常 环境变量配置 C:\Users\wuxulong\cpp_env\MinGw\mingw64\bin C:\Users\wuxulon…...

机器学习---SVM目标函数求解,SMO算法
1. 线性可分支持向量机 1.1 定义输入数据 假设给定⼀个特征空间上的训练集为: 其中,(x , y )称为样本点。 x 为第i个实例(样本)。 y 为x 的标记: 当y 1时,x 为正例;当y −1时,x…...

044_第三代软件开发-保存PDF
第三代软件开发-保存PDF 文章目录 第三代软件开发-保存PDF项目介绍保存PDF头文件源文件使用 关键字: Qt、 Qml、 pdf、 painter、 打印 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Languageÿ…...
2023红帽论坛:构建开放AI生态,助力企业数字革新之路
随着人工智能技术的飞速发展,各行各业正面临着一场前所未有的数字化转型浪潮。尤其是AIGC(人工智能生成内容)技术自2022年底以来的蓬勃兴起,不仅重塑了用户体验,也为企业运营带来了深刻的变革。 在这样的大背景下&…...
阿里云国际站和华为云国际站之间该如何选择?
阿里云国际站和华为云国际站都是知名的云计算服务提供商,它们各自具有一些独特的优势和劣势。以下是它们之间的一些对比,九河云根据不同的使用场景提供的建议: 阿里云国际站: 优势: 全球覆盖:阿里云国际…...

JavaScript设计模式之责任链模式
适用场景:一个完整的流程,中间分成多个环节,各个环节之间存在一定的顺序关系,同时中间的环节的个数不一定,可能添加环节,也可能减少环节,只要保证顺序关系就可以。 如下图: ES5写法…...

云安全—kubelet攻击面
0x00 前言 虽然说总结的是kubelet的攻击面,但是在总结攻击面之前还是需要去了解kubelet的基本原理,虽然说我们浅尝即止,但是还是要以能给别人讲出来为基本原则。 其他文章: 云安全—K8s APi Server 6443 攻击面云安全—K8S API Server 未授…...
leetcode经典面试150题---5.多数元素
目录 题目描述 前置知识 代码 方法一 排序法 思路 实现 复杂度 方法二 哈希表 思路 实现 题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给…...

Vue ElementUI el-tooltip 全局样式修改
el-tooltip 要点 此处是全局配置;如果想设置指定的 tooltip 可设置属性 popper-class,为 tooltip 的 popper 添加类名;代码 6 - 8 行,隐藏小三角; .el-tooltip__popper {border-radius: 4px !important;color: #9E9…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...