C++opencv图像裁剪、等比例放大缩小、复制到指定区域

2023-11-10

描述

C++使用opencv时,对imshow图像进行的常见处理,包括图像剪裁、等比例压缩等(待继续补充)

代码

1. 剪裁

int matrix_size = 3000;
cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图
cv::Mat image_part = image(cv::Rect(1400,1100,1000,1800)); // 裁剪后的图
cv::imshow("part of original image", image_part);
cv::waitKey(5);

代码中
cv::Rect是opencv画的矩形,四个参数分别为矩形(左上角的column值,左上角的row值,矩形column方向上的宽,矩形row方向上的宽)

2. 等比例缩小

int matrix_size = 3000;
cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图
cv::Mat image_mini; // 等比例缩小图
resize(image, image_mini, cv::Size(matrix_size/3, matrix_size/3)); // 缩小操作
cv::imshow("mini of original image", image_mini);
cv::waitKey(5);

3. 等比例放大

int matrix_size = 3000;
cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图
cv::Mat image_max; // 等比例放大图
resize(image, image_max, Size(matrix_size * 2, matrix_size * 2)); // 放大操作
cv::imshow("max of original image", image_max);
cv::waitKey(5);

4. 提取图像的固定行和列

原始Mat格式数据:

cv::Mat A = Mat::zeros(4, 5, CV_32F);//【4行5列,高4宽5】
  • 提取行
cv::Mat B = A.rowRange(0, 3).clone() ; //提取第0~2行(包括第2行)
  • 提取列
cv::Mat C = A.colRange(2, 5).clone() ; //提取第2~4列(包括第4列)

注意,rowRange(start,end)与colRange(start,end)均包括左边界,不包括右边界。

  • copyTo()函数
cv::Mat c = Mat::zeros(3, 5, CV_32F);
cv::Mat a = Mat::ones(3, 6, CV_32F);
c.col(0).copyTo(a.col(0)); //将c的第1列赋值给a
c.copyTo(a.colRange(1, 6)); //将c的1-5列赋值给a

5. 图像复制到指定区域

// 变量请自行初始化
cv::Mat image_origin, image_new;
cv::Rect area_keep = cv::Rect(0, v, matrix_size - u, matrix_size - v);
cv::Mat image_keep = image_origin(area_keep);
cv::Rect area_new = cv::Rect(u, 0, matrix_size - u, matrix_size - v);
image_keep.copyTo(image_new(area_new));

resize()函数的参数

void cv::resize (InputArray src,
		OutputArray dst,
		Size dsize,
		double fx = 0,
		double fy = 0,
		int interpolation = INTER_LINEAR

参数含义

  • src(必填): 原图像

  • dst(必填): 变换后的图像

  • dsize(必填): 写法cv::Size(col, row),变换后的图像尺寸

  • fx 和 fy(自由选填): 缩放系数,1为不变,<1缩小,>1放大。如果 Size 被设置的话,则根据 Size 做缩放插值;如果没写Size,需要根据 fx 和 fy 做缩放插值。
    以下两种写法一致

    resize(image, image_mini, cv::Size(image.cols/2, image.rows));
    resize(image, image_mini, cv::Size(), 0.5, 1);
    
  • interpolation(自由选填): 插值算法,自行去研究,不填写就是默认为0, 也就是最近点插值INTER_NEAREST

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++opencv图像裁剪、等比例放大缩小、复制到指定区域 的相关文章

  • 将运算符 << 添加到 std::vector

    我想添加operator lt lt to std vector
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • iis服务器文件上传大小限制,IIS修改最大上传文件限制的方法

    我们在修改PageAdmin网站管理系统的附件上传大小时候 经常出现修改后还是上传不了大文件 这是因为服务器系统本身的限制导致的 下面分别对IIs6和IIs7的修改方法作详细介绍 IIS7的修改方法 IIS7 0默认限制上传文件大小为300
  • 堆栈认知——栈溢出实例(ret2libc)

    参考 栈溢出实例 笔记三 ret2libc 地址 https qingmu blog csdn net article details 119481681 目录 1 栈溢出含义及栈结构 2 ret2libc基本思路 3 实战 3 1 二进制
  • python爬虫系列4--BeautifulSoup

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 中文文档链接 https www crummy com software BeautifulSoup bs4 doc index zh html id
  • jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结

    原文地址 http www jb51 net article 76917 htm 建议直接查看原文 1 选择器 1 通配符 input id code id属性以code开始的所有input标签 input id code id属性以cod
  • 基于CNN遥感图象分类+前后端交互

    基于CNN遥感图像分类 前后端交互 基于CNN遥感图像分类 前后端交互 一 项目介绍 1 1 项目简述 1 2 几个概念 二 遥感图片分类模型 2 1 训练数据的处理 三 效果展示 参考资料 项目完整代码 GitHub 一 项目介绍 1 1
  • Caused by org.hibernate.AnnotationException No identifier specified for entity:com.beans.UserInfo

    Causedby org hibernate AnnotationException No identifier specified for entity 这是在SpringBoot 整合SpringDataJPA写测试类遇到的错误 意思是
  • 使用QRCoder生成二维码【.NET 6.0】

    nuget 包 QRCoder 二维码 install package QRCoder 1 4 3 粘贴板 install package TextCopy 6 2 1 using QRCoder using Spectre Console
  • 【毕业设计】 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 总体框架 AB32VG1主控MCU 5 软件说明 总体框架 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创
  • 【Matlab学习笔记】matlab的编程规则

    1 Matlab的续行符 关于matab的换行 在matlab代码的编写过程中 有时会遇到代码在一行显示不开了 或者在txt文档 或其他代码编辑后 由于其本身格式的作用 代码可能会自动换行 将这样的代码直接粘贴到matlab的命令窗口运行
  • Windows系统安装Java环境

    一 安装jdk 不同平台安装不同的包 Oracle官方下载 Oracle官方各版本 推荐安装jdk1 8 32位操作系统 准备jdk xxx windows i586 exe 64为操作系统 准备jdk xxx windows x64 ex
  • Linux进程间通信方式--本地socket

    先上一个代码 服务端 cpp view plain copy s unix c include
  • js获取任意一天的起始和结束时间戳,sql转换时间戳

    最近写代码时 需要获取任意一天的起始和结束时间 0点和23 59 59这两个时间的时间戳 使用了setHours 方法 setHours 方法用于设置指定的时间的小时字段 1 获取当天开始时间 moment new Date new Dat
  • 巨头推广刷脸支付依旧重重加码

    正如当年支付宝推广二维码 在推广刷脸支付上 巨头依旧重重加码 支持商家实现数字化转型 如此力度推广 对于服务商而言是一块巨大的蛋糕 回想推广二维码时期赚的盆满钵满的服务商们 刷脸支付必然会吸引一大波创业者前来逐利 而刷脸支付的红海就在这两年
  • STM32移植lwip之官方工程修改

    本篇目标 在之前的硬件基础上 修改ST官方移植lwip的工程 使PC机能ping通stm32 材料准备 硬件基础 stm32f407 lan9303 官方资料 包含代码和移植手册 stm32官方移植lwip资料 修改代码 包含移植后的代码
  • CPU特权级保护

    1 特权级 1 1特权级 处理器段保护机制可以识别0 3共4级特权级 数值越大 特权越小 处理器通过识别CPL DPL RPL这三种特权级来进行特权级校验 1 CPL CPL是当前正在执行程序或任务的特权级 它存放在CS和SS段寄存器的0位
  • 柏林噪声算法(Perlin Noise)

    概述 引述维基百科的介绍 Perlin噪声 Perlin noise 又称为柏林噪声 指由Ken Perlin发明的自然噪声生成算法 具有在函数上的连续性 并可在多次调用时给出一致的数值 在电子游戏领域中可以透过使用Perlin噪声生成具连
  • 基于霍尔传感器的三轴磁场检测小装置

    本次项目是制作一个三轴磁场检测的小装置 采用霍尔传感器实现检测 首先我们来介绍一下什么是霍尔传感器 1 霍尔传感器介绍 霍尔传感器是根据霍尔效应制作的一种磁场传感器 磁场中有一个霍尔半导体片 恒定电流I从A到B通过该片 在洛仑兹力的作用下
  • Python打包可执行文件-BeeWare

    前言 本文是想要将python代码打包成在手机上能执行的文件 尝试了几个库 有这也那样的限制 最终还是选了BeeWare 环境 python3 7 x 开始 找到打包有相关工具os android apk builder buildozer
  • sqlserver 快速插入数据 如何使用索引_如何快速安全的插入千万条数据

    前言 最近有个需求解析一个订单文件 并且说明文件可达到千万条数据 每条数据大概在20个字段左右 每个字段使用逗号分隔 需要尽量在半小时内入库 思路 估算文件大小 因为告诉文件有千万条 同时每条记录大概在20个字段左右 所以可以大致估算一下整
  • C++opencv图像裁剪、等比例放大缩小、复制到指定区域

    描述 C 使用opencv时 对imshow图像进行的常见处理 包括图像剪裁 等比例压缩等 待继续补充 代码 1 剪裁 int matrix size 3000 cv Mat image matrix size matrix size CV