opencv中的图像操作

图像操作

输入输出

从文件中加载图像:

 Mat img = imread(filename); // 读取灰度图Mat img = imread(filename, IMREAD_GRAYSCALE);

保存图像:

imwrite(filename,img);

文件的格式由其扩展名决定。
使用cv::imdecodecv::imencode从/到内存读取和写入图像,而不是文件。

图像的基本操作

访问像素的强度值

对于单通道图像,如灰度图,每个像素只有一个强度值,可以直接使用**at**来获取。

 Scalar intensity = img.at<uchar>(y, x);

对于多通道图像,通常指三通道BGR色彩图像,则需要使用Vec3b

 Vec3b intensity = img.at<Vec3b>(y, x);uchar blue = intensity.val[0];uchar green = intensity.val[1];uchar red = intensity.val[2];

此外,仅在C++中可以使用std::vector来构造一个矩阵。

 vector<Point2f> points;//... fill the arrayMat pointsMat = Mat(points);

C++还可以使用同样的方法:

 Point2f point = pointsMat.at<Point2f>(i, 0);

内存管理和引用计数

Mat是一个保持矩阵/图像特征(行和列数,数据类型等)和指向数据的指针的结构。也因此,我们其实可以有多个关联到同一个数据的Mat实例。当Mat的一个特定实例被销毁时,Mat会保持一个引用计数,该计数告诉我们数据是否必须被释放。

以下是一个没有拷贝数据创造两个Mat的例子:

 std::vector<Point3f> points;// .. fill the arrayMat pointsMat = Mat(points).reshape(1);// 该方法通常用来处理大量点数据并将其转换成矩阵

结果是我们将会获得一个32FC1(32-bit浮点单通道,其列数为3)的三通道矩阵,而不是32FC3的单通道矩阵。pointsMat使用来自点的数据且不会再销毁时释放内存。但是,在实际的例子中,开发者仍然需要确保points的生命周期比pointsMat更长。如果需要拷贝数据,请使用cv::Mat::copyTocv::Mat::clone来进行复制操作。

 Mat img = imread("image.jpg");Mat img1 = img.clone();

可以为每个函数提供一个空输出Mat。每个实现都为目标矩阵调用Mat::create。如果矩阵为空,则此方法为其分配数据。如果它不为空并且具有正确的大小和类型,则该方法不执行任何操作。但是,如果大小或类型与输入参数不同,则释放(并丢失)旧数据并分配新数据。举个例子:

 Mat img = imread("image.jpg");Mat sobelx;Sobel(img, sobelx, CV_32F, 1, 0);

基础操作

 // 从一个已经存在的灰度图中获取一个黑色的图像img = Scalar(0); // 选取ROI(region of interest)Rect r(10, 10, 100, 100);Mat smallImg = img(r);// 从彩色图转换成灰度图Mat img = imread("image.jpg"); // loading a 8UC3 imageMat grey;cvtColor(img, grey, COLOR_BGR2GRAY);// 将图片从8UC1转换到32FC1src.convertTo(dst, CV_32F);

图像可视化

在开发过程中,能看到你算法的中间结果是非常有帮助的。Opencv提供了一种非常好用的可视化图像的方法。一个8U的图像可以被如下展示:

 Mat img = imread("image.jpg");namedWindow("image", WINDOW_AUTOSIZE);imshow("image", img);waitKey();

waitKey的调用将会形成一个消息传递循环,等待“图像”窗口中的按键才会被中止。一个32F的图像需要被转换成8U的类型,例子如下所示:

 Mat img = imread("image.jpg");Mat grey;cvtColor(img, grey, COLOR_BGR2GRAY);Mat sobelx;Sobel(grey, sobelx, CV_32F, 1, 0);double minVal, maxVal;minMaxLoc(sobelx, &minVal, &maxVal); //find minimum and maximum intensitiesMat draw;sobelx.convertTo(draw, CV_8U, 255.0/(maxVal - minVal), -minVal * 255.0/(maxVal - minVal));namedWindow("image", WINDOW_AUTOSIZE);imshow("image", draw);waitKey();

这里cv::namedWindow不是必需的,因为它后面紧跟着cv::imshow。然而,它可以用来改变窗口属性或当使用cv::createTrackbar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web前端、后端与建站:全方位解析四大基石、五大挑战、六大技术与七大策略

Web前端、后端与建站&#xff1a;全方位解析四大基石、五大挑战、六大技术与七大策略 在当今数字化时代&#xff0c;Web前端、后端以及建站技术已经成为构建现代网站和应用不可或缺的关键要素。本文将从四个方面探讨Web前端与后端的基础&#xff0c;从五个方面分析建站过程中的…

docker镜像是什么意思,如何通俗点的解释一下

Docker镜像&#xff08;Docker Image&#xff09;可以通俗地理解为一个包含应用程序及其运行环境的“模版”或“快照”。这些镜像是应用程序在Docker容器中运行的基础。以下是一个更详细的解释&#xff1a; 通俗解释 软件快照&#xff1a;想象你有一个操作系统、几个软件和一些…

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-通话时长限制

文章目录 前言联系我们场景运用机器人场景普通通话场景 前言 顶顶通呼叫中心中间件限制通话时长有两种写法&#xff0c;分别作用于机器人场景与普通通话场景。 普通场景可分为分机互打、分机外呼手机等。 联系我们 有意向了解呼叫中心中间件的用户&#xff0c;可以点击该链接…

linux shell实现端口查询

需求&#xff1a; 查找22端口请求数最高的前 20个IP地址&#xff0c;判断中间最小的请求数是否大于10&#xff0c;如大于10&#xff0c;则输出系统活动情况报告到/tmp/sar.txt&#xff0c;如果没有&#xff0c;则在 600s 后重试&#xff0c;直到有输出为止。 实现&#xff1a…

SAP Build 2-PDF数据提取与决策

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent&#xff0c;否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…

RabbitMQ安装配置,封装工具类,发送消息及监听

1. Get-Started docker安装rabbitmq 拉取镜像 [rootheima ~]# docker pull rabbitmq:3.8-management 3.8-management: Pulling from library/rabbitmq 7b1a6ab2e44d: Pull complete 37f453d83d8f: Pull complete e64e769bc4fd: Pull complete c288a913222f: Pull complet…

代码随想录算法训练营day8| 344. 反转字符串,541. 反转字符串II,卡码网:54.替换数字

代码随想录 1、344. 反转字符串【简单】 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&…

C# Winform Chart图表使用和详解

Chart控件是微软自带的一种图形可视化组件&#xff0c;能展示种类丰富的图表形式。如曲线图&#xff0c;折线图&#xff0c;饼状图&#xff0c;环形图&#xff0c;柱状图&#xff0c;曲线面积图。 实例代码链接&#xff1a;https://download.csdn.net/download/lvxingzhe3/8943…

【wiki知识库】06.文档管理接口的实现--SpringBoot后端部分

目录 一、&#x1f525;今日目标 二、&#x1f388;SpringBoot部分类的添加 1.调用MybatisGenerator 2.添加DocSaveParam 3.添加DocQueryVo 三、&#x1f686;后端新增接口 3.1添加DocController 3.1.1 /all/{ebokId} 3.1.2 /doc/save 3.1.3 /doc/delete/{idStr} …

机器学习之Transformer模型和大型语言模型(LLMs)

Transformer模型和大型语言模型(LLMs)是现代自然语言处理(NLP)和人工智能(AI)领域的前沿技术。这些模型革新了机器理解和生成人类语言的方式,使得从聊天机器人和自动翻译到复杂的内容生成和情感分析的应用成为可能。 Transformer模型 概述 Transformer模型是现代自然…

vue2 vue3 中指令总结

vue2 vue3 中指令总结 使用方式vue2 指令定义方式钩子的参数指令钩子和组件生命周期的执行顺序是怎样的&#xff1f; vue3 中的指令定义方式hook vs 指令指令钩子函数和组件生命周期的执行顺序 指令和 render 函数指令用在 jsx 上指令和 render 函数一起使用 最佳实践其他问题参…

[Qt] Qt Creator 以及 Qt 在线安装教程

一、Qt Creator 下载及安装 1、从以下镜像源下载安装包常规安装即可 Qt Creator 也可以在第二步Qt 在线安装时一次性勾选安装&#xff0c;见后文 Qt Creator 中科大源下载地址 二、Qt 在线安装 1、根据所在平台选择对应的安装器下载 Qt 在线安装器下载 2、可能的安装报错…

Windows 11部署FunASR离线语音识别系统

Windows 11部署FunASR离线语音识别系统 官网连接 https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md1-安装Docker 运行Docker Desktop Installer.exe安装Docker 2-Windows添加删除程序增加虚拟机和Linux子系统功能 …

云电脑有多好用?适合哪些人使用?

云电脑作为一种新型的计算模式&#xff0c;其应用场景广泛且多样&#xff0c;适合各类人群使用。云电脑适合什么人群使用&#xff1f;云电脑有哪些应用场景&#xff1f;有什么好的云电脑推荐&#xff1f;以下本文将详细探讨云电脑的主要应用场景及其适用人群的相关内容&#xf…

win10下使用docker和VMware

1. 要使用docker的处理 打开 Hyper-V 管理员身份打开提示符。 输入命令bcdedit /set hypervisorlaunchtype auto 重启电脑 2. 要使用vm虚拟机 关闭 Hyper-V 管理员身份打开提示符。 输入 bcdedit 并回车&#xff0c;找到hypervisorlaunchtype选项发现为auto 输入命令bcdedit /s…

C#使用OpenXml读取Word、PPT、Excel文档内容

DocumentFormat.OpenXml是微软官方推出的一个操作Excel、Word、PPT文件的开源组件&#xff0c;因此它是免费的。以下是一些关于DocumentFormat.OpenXml的详细信息&#xff1a; 开源性质&#xff1a;DocumentFormat.OpenXml是一个开源项目&#xff0c;这意味着其源代码是公开的…

JavaScript内置方法 操作数组和字符串

在JavaScript中&#xff0c;数组和字符串是非常常见的数据类型&#xff0c;它们各自有一套强大的内置方法。以下是一些常用的数组和字符串方法&#xff0c;以及它们的实例和注意事项&#xff1a; 数组操作方法&#xff1a; 1. push() / pop() push()&#xff1a;向数组的末尾…

禁用PS/Photoshop等一系列Adobe旗下软件联网外传用户数据操作

方案一&#xff1a; 下载火绒杀毒&#xff0c;在联网请求上禁用Adobe软件的联网请求&#xff0c;甚至还可以额外发现哪些是它要想要偷偷摸摸干的。 方案二&#xff1a; 最后注意&#xff1a; 用盗版软件只是获得了使用权&#xff01;

Docker系列.Docker Desktop中如何启用Kubernetes

Docker技术概论 Docker Desktop中如何启用Kubernetes - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.…

Linux编辑器 vim使用 (解决普通用户无法进行sudo提权问题)

文章目录 一.vim是什么命令模式底行模式 二.关于vim暂停问题三.注释批量化注释批量化去注释 四.解决普通用户无法进行sudo提权问题五.vim的配置 一.vim是什么 用过VS的都知道&#xff0c;拥有着编辑器编译器调试.编写C&#xff0c;C&#xff0c;python等的功能。就是集成 Linu…