openCV图像读取和显示

news2024/11/17 9:36:12

文章目录

  • 一、imread
  • 二、namedWindow
  • 三、imshow

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc,char** argv)
{
  cv::Mat img = imread("./sun.png"); //3通道 24位

  if (img.empty()) {
	std::cout << "could not load image!\n" << endl;
	return -1;
  }

  namedWindow("input",WINDOW_FREERATIO);
  imshow("input",img);

  std::cout << "load image!\n" << endl;

  //0 阻塞 1停顿一毫秒
  waitKey(0);

  destroyAllWindows();

  return 0;
}

运行
图像读取

一、imread

imread是OpenCV图像处理库中的一个函数,用于从文件中读取图像数据并将其存储为一个Mat对象

cv::Mat cv::imread(
    const String& filename,    // 文件路径
    int flags = IMREAD_COLOR   // 图像读取标志,默认为彩色图像
);

其中,参数filename指定了要读取的图像文件的路径和文件名;参数flags指定了读取图像时的标志,它是一个可选参数,默认值为IMREAD_COLOR,表示读取彩色图像。

imread函数支持读取多种图像格式的文件,包括PNG、JPEG、BMP、GIF、TIFF等。读取的图像数据存储在一个Mat对象中,可以通过Mat对象的成员函数来访问和操作图像数据。

需要注意的是,如果指定的文件不存在或格式不正确,imread函数会返回一个空的Mat对象。因此,在调用imread函数之后,需要检查返回值是否为空,以确保图像已经正确读取。

imread函数的flags参数用于指定图像的读取方式,它是一个可选参数,如果不指定则默认为IMREAD_COLOR,即读取彩色图像。flags参数可以取以下几个值之一:

  • IMREAD_UNCHANGED:读取原始图像,包括图像的alpha通道(如果存在的话),并将其存储在Mat对象中。

  • IMREAD_GRAYSCALE:以灰度模式读取图像,将图像转换为单通道灰度图像,并将其存储在Mat对象中。

  • IMREAD_COLOR:读取彩色图像,将图像转换为三通道BGR格式,并将其存储在Mat对象中。

  • IMREAD_ANYDEPTH:读取图像的像素深度为16位或32位的图像,将其存储在Mat对象中。

  • IMREAD_ANYCOLOR:读取图像的颜色格式为任意格式的图像,将其存储在Mat对象中。

  • IMREAD_REDUCED_GRAYSCALE_2:以降采样的灰度模式读取图像,将图像转换为单通道灰度图像,并将其存储在Mat对象中,图像大小减半。

  • IMREAD_REDUCED_GRAYSCALE_4:以降采样的灰度模式读取图像,将图像转换为单通道灰度图像,并将其存储在Mat对象中,图像大小缩小为原来的四分之一。

  • IMREAD_REDUCED_GRAYSCALE_8:以降采样的灰度模式读取图像,将图像转换为单通道灰度图像,并将其存储在Mat对象中,图像大小缩小为原来的八分之一。

    需要注意的是,IMREAD_ANYDEPTH和IMREAD_ANYCOLOR两个标志不能单独使用,必须与其他标志一起使用。同时,降采样的灰度模式只适用于灰度图像,对于彩色图像则无效。

二、namedWindow

namedWindow是OpenCV图像处理库中的一个函数,用于创建一个窗口对象,以便后续在该窗口中显示图像或执行其他操作。

void namedWindow(
    const String& winname,  // 窗口名称
    int flags = WINDOW_AUTOSIZE  // 窗口属性,默认为自适应大小
);

其中,参数winname指定了创建的窗口的名称,可以是任意字符串;参数flags指定了创建的窗口的属性,它是一个可选参数,默认值为WINDOW_AUTOSIZE,表示创建一个自适应大小的窗口,即窗口的大小会自动调整以适应要显示的图像的大小。如果将flags设置为WINDOW_FREERATIO,则创建的窗口可以手动调整大小,即可以通过鼠标拖动窗口边框来改变窗口大小,并且图像的宽高比会保持不变。

namedWindow函数的flags参数用于指定创建的窗口的属性,它是一个可选参数,如果不指定则默认为WINDOW_AUTOSIZE,即创建一个自适应大小的窗口。flags参数可以取以下几个值之一:

  • WINDOW_NORMAL:创建一个手动调整大小的窗口,可以通过鼠标拖动窗口边框来改变窗口大小,并且图像的宽高比会保持不变。
  • WINDOW_AUTOSIZE:创建一个自适应大小的窗口,即窗口的大小会自动调整以适应要显示的图像的大小。
  • WINDOW_FREERATIO:创建一个手动调整大小的窗口,可以通过鼠标拖动窗口边框来改变窗口大小,并且图像的宽高比也可以随意改变。
    需要注意的是,WINDOW_NORMAL和WINDOW_FREERATIO两个标志不能同时使用,只能选择其中一个。

三、imshow

imshow是OpenCV图像处理库中的一个函数,用于在指定的窗口中显示图像。

void imshow(
    const String& winname,  // 窗口名称
    InputArray mat  // 要显示的图像
);

其中,参数winname指定了要在哪个窗口中显示图像,它必须与之前使用namedWindow函数创建的窗口名称相同;参数mat是要显示的图像,它可以是Mat、UMat、MatExpr等类型的对象。


推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:
C++初级课程链接:
https://ke.qq.com/course/444655?flowToken=1043280
Qt课程链接:
https://ke.qq.com/course/444655?flowToken=1044614

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

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

相关文章

App自动化测试|dom结构和元素定位方式

先来看几个名词和解释&#xff1a; dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互。界面的结构化描述&#xff0c; 常见的格式为html、xml。核心元素为节点和属性 xpath: xml路径语言&#xff0c;用于xml 中的节点定位&#xff0c;XPath 可在 x…

ABAP 自定义搜索功能 demo1

ABAP 自定义搜索功能 demo1 效果&#xff1a; 双击选中行则为选中对应发票 实现 1定义 定义屏幕筛选参数 SELECTION-SCREEN BEGIN OF SCREEN 9020. SELECT-OPTIONS:s1_belnr FOR rbkp-belnr, s1_gjahr FOR rbkp-gjahr, s1_lifnr FOR rbkp-lifnr, s1_erfna FOR rbkp-erfnam, …

Go学习第四天

Interface空接口万能类型与类型断言机制 package mainimport "fmt"// interface{}是万能数据类型 func myFunc(arg interface{}) {fmt.Println("myFunc is celled....")fmt.Println(arg)// interface{} 该如何区分 此时引用的底层数据类型到底是什么&…

14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序

文章目录 1. 实现高层网络操作的类2. 基于HTTP协议的网络文件下载3.源码3.1 可是化UI设计3.2 mainwindow.h3.3 mainwindow.cpp 1. 实现高层网络操作的类 Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议&#xff0c;如 HTTP、FTP、SNMP等&#xff0c;这些类主要是…

linux Ubuntu 更新镜像源、安装sudo、nvtop

1.更换镜像源 vi ~/.pip/pip.conf在打开的文件中输入: pip.conf [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple按下:wq保存并退出。 2.安装nvtop 如果输入指令apt install nvtop报错&#xff1a; E: Unable to locate package nvtop 需要更新一下apt&a…

MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容测评

今天给大家带来了 MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容 100 挑战赛 的视频&#xff0c;现在充电头再以文章的形式呈现给大家&#xff0c;让大家更清楚、直白的了解这款笔记本在升级系统后的兼容性如何。 MacBook Pro 16 M1 Max 配置了 140W 的 MagSafe 充电口&…

设备管理系统与物联网的融合:实现智能化设备监控和维护

在数字化时代&#xff0c;设备管理系统和物联网技术的融合为工业企业带来了巨大的变革和创新。本文将探讨设备管理系统与物联网的融合&#xff0c;重点介绍设备健康管理平台在实现智能化设备监控和维护方面的关键作用和优势。 一、设备管理系统与物联网的融合 随着物联网技术的…

37.利用linprog解 有约束条件多元变量函数最小值(matlab程序)

1.简述 linprog函数主要用来求线型规划中的最小值问题&#xff08;最大值的镜像问题&#xff0c;求最大值只需要加个“-”&#xff09; 2. 算法结构及使用方法 针对约束条件为Axb或Ax≤b的问题 2.1 linprog函数 xlinprog(f,A,b) xlinprog(f,A,b,Aeq,beq) xlinprog(f,A,b,Aeq,…

PROFINET转ETHERCAT协议网关三菱plc支持ethercat吗

捷米特JM–ECAT-PN是自主研发的一款 PROFINET 从站功能的通讯网关。该产品主要功能是将 PROFINET 网络和 ETHERCAT 网络连接起来。 捷米特JM-ECAT-PN连接到 PROFINET 总线中做为从站使用&#xff0c;连接到 ETHERCAT 总线中做为从站使用。 3.技术参数 PROFINET 技术参数 网关…

软件测试界扎心的谣言:为什么说功能测试是巨坑?

​ 前言 一般而言&#xff0c;想要持续在行业内发展&#xff0c;会选择继续提升自己的测试技能&#xff0c;而目前自动化测试作为业内最主流的技术&#xff0c;往后发展可以进阶到测试开发&#xff0c;但前提条件还是要掌握到足够好的自动化测试技术才行。包括说编程语言的学习…

918. 环形子数组的最大和;2531. 使字符串总不同字符的数目相等;1238. 循环码排列

918. 环形子数组的最大和 核心思想&#xff1a;其实这题不加环形很好做&#xff0c;就是一个动态规划或者贪心就能够解决。加了环形我们应该怎么考虑呢&#xff0c;无非就是两种&#xff0c;第1种是子数组只包含首尾的一个&#xff0c;我们直接求子数组的最大连续和即可&#…

springboot+vue农产品特产商城销售平台_50kf2 多商家

随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;南阳特产销售平台展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;为解决…

【Docker晋升记】No.1--- Docker工具核心组件构成(镜像、容器、仓库)及性能属性

文章目录 前言&#x1f31f;一、Docker工具&#x1f31f;二、Docker 引擎&#x1f30f;2.1.容器管理&#xff1a;&#x1f30f;2.2.镜像管理&#xff1a;&#x1f30f;2.3.资源管理&#xff1a;&#x1f30f;2.4.网络管理&#xff1a;&#x1f30f;2.5.存储管理&#xff1a;&am…

Python tkinter 制作文章搜索软件,精准定位想看文章

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 无聊的时候做了一个搜索文章的软件&#xff0c;有没有更加的方便快捷不知道&#xff0c;好玩就行了 环境使用 Python 3.8 Pycharm 模块使用 import requests import tkinter as tk from tkinter import ttk impo…

Vue3_03_setup函数

1.理解&#xff1a;Vue3.0 中的一个新的配置项&#xff0c;值为一个函数。 2.setup是所有组合式 API 表演的舞台。 3.组件中所用到的&#xff1a;数据、方法等等&#xff0c;均要配置在setup中。 4.setup函数的两种返回值&#xff1a; 若返回一个对象&#xff0c;则对象中的…

DirectX12 3D立方体游戏编程选修作业-龙书

DirectX12 3D立方体游戏编程作业-龙书 作业效果配置描述文件参考书签 作业效果 配置描述文件 参考:龙书dx12 chapter-6 电子版在CSDN下载里直接下载的 配置&#xff1a;将龙书中的visual stdio2015修改为visual stdio2019; visual stdio2019组件选择&#xff1a; desktop dev…

C++类和对象入门(下)

C类和对象入门 1. Static成员1.1 Static成员的概念2.2 Static成员的特性 2.友元2.1 友元函数2.2 友元函数的特性2.3 友元类 3. 内部类3.1 内部类的概念和特性 4. 匿名对象5. 再次理解类和对象 1. Static成员 1.1 Static成员的概念 声明为static的类成员称为类的静态成员&…

libtorch::Tensor与Eigen::Tensor互相转换

1. Eigen::Tensor转libtorch::Tensor Eigen::Tensor<float, 3> a{2,4,3};a.setRandom();a(1,2,1) 11.0;/*核心*/torch::Tensor b torch::from_blob(a.data(), {1, a.dimension(2), a.dimension(1), a.dimension(0)});/*核心*/b b.permute({0, 3, 2, 1});std::cout <…

Qt QThread的moveToThread方法使用

Qt线程简介 从 Qt4.4 版本之后&#xff0c;因为 QThread 的 run 方法创建新线程这样实现与 Qt 设计的理念不符&#xff0c;Qt 主推使用 moveToThread 方法来创建新线程。QThread 应该被看做是操作系统线程的接口或控制点&#xff0c;而不应该包含需要在新线程中运行的代码。需…

C++数据结构之BST(二叉搜索树)的实现

目录 01.BST的介绍02.BST 要实现的对外方法03.摘要04.查找节点4.1四个引用&#xff0c;都有妙用4.2递归版4.3非递归版 05.插入节点5.1利用search的返回值5.2更新高度的注意事项5.3插入算法的完整代码 06.删除节点6.1框架6.2单分支&#xff0c;直接替代6.3双分支&#xff0c;化繁…