opencv学习笔记1-opencv读取图片并显示

一、函数介绍:

1.imread :

  • imread函数是 OpenCV 库中的一个函数,用于从指定文件中加载图像并返回它。
a.函数原型:
  • CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
b.参数:

(1)filename:要加载的文件的名称。

(2)flags(可选):读取模式的标志,其值可以是 cv::ImreadModes 枚举中的一个。默认值为 IMREAD_COLOR,表示加载彩色图像。

(3)flags中其他参数的选择

  • IMREAD_UNCHANGED = -1:如果设置此标志,将返回原始加载的图像(包括 alpha 通道,否则 alpha 通道会被裁剪)。忽略 EXIF 方向信息。
  • IMREAD_GRAYSCALE = 0:如果设置此标志,总是将图像转换为单通道灰度图像(使用编解码器内部转换)。
  • IMREAD_COLOR = 1:如果设置此标志,总是将图像转换为3通道 BGR 彩色图像。
  • IMREAD_ANYDEPTH = 2:如果设置此标志,当输入图像具有相应的深度时,返回16位/32位图像,否则将其转换为8位。
  • IMREAD_ANYCOLOR = 4:如果设置此标志,图像将以任何可能的颜色格式读取。
  • IMREAD_LOAD_GDAL = 8:如果设置此标志,使用 GDAL 驱动程序加载图像。
  • IMREAD_REDUCED_GRAYSCALE_2 = 16:如果设置此标志,总是将图像转换为单通道灰度图像,并将图像大小减少到1/2。
  • IMREAD_REDUCED_COLOR_2 = 17:如果设置此标志,总是将图像转换为3通道 BGR彩色图像,并将图像大小减少到1/2。
  • IMREAD_REDUCED_GRAYSCALE_4 = 32:如果设置此标志,总是将图像转换为单通道灰度图像,并将图像大小减少到1/4。
  • IMREAD_REDUCED_COLOR_4 = 33:如果设置此标志,总是将图像转换为3通道 BGR彩色图像,并将图像大小减少到1/4。
  • IMREAD_REDUCED_GRAYSCALE_8 = 64:如果设置此标志,总是将图像转换为单通道灰度图像,并将图像大小减少到1/8。
  • IMREAD_REDUCED_COLOR_8 = 65:如果设置此标志,总是将图像转换为3通道 BGR彩色图像,并将图像大小减少到1/8。
  • IMREAD_IGNORE_ORIENTATION = 128:如果设置此标志,不要根据 EXIF 的方向标志旋转图像。
 c.返回值:
  • 返回一个 cv::Mat 对象,它是一个矩阵,用于存储图像数据。如果图像无法读取(例如,文件缺失、权限不当、格式不支持或无效),则返回一个空矩阵(Mat::data==NULL)。
2.imshow:
  • imshow 函数是 OpenCV 库中用于在窗口中显示图像的函数 。
a.函数原型:
  • CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
b.参数:
  • winname:窗口的名称。如果窗口已经创建,函数将在该窗口中显示图像。
  • mat:要显示的图像,可以是 cv::Mat 类型或其他支持的输入数组类型。
c.功能描述:
  • imshow 函数将图像显示在指定的窗口中。如果窗口之前已经创建,并且使用了 cv::WINDOW_AUTOSIZE 标志,图像将以原始大小显示,但仍然受屏幕分辨率的限制。否则,图像将被缩放到适应窗口大小。
  • 函数可能会根据图像的深度进行缩放处理:
    • 如果图像是8位无符号类型,它将按原样显示。
    • 如果图像是16位无符号类型,像素值将被除以256。也就是说,值范围 [0, 255*256] 被映射到 [0, 255]。
    • 如果图像是32位或64位浮点类型,像素值将乘以255。也就是说,值范围 [0, 1] 被映射到 [0, 255]。
    • 32位整数图像不再被处理,因为所需的转换不明确。需要将其转换为8位无符号矩阵,并使用针对图像上下文的特定预处理。
  • 如果在调用 imshow 之前窗口尚未创建,它将假定创建一个使用 cv::WINDOW_AUTOSIZE 的窗口
  • 如果你需要显示一个大于屏幕分辨率的图像,你需要在 imshow 之前调用 namedWindow("", WINDOW_NORMAL)
  • 要移除窗口,使用 cv::destroyWindow

 二、代码示例:

#include <opencv2/core/utils/logger.hpp>//隐藏日志
#include <opencv2/highgui/highgui_c.h>
#include<opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/objdetect.hpp>
#include<iostream>
using namespace std;
using namespace cv;

//1-OPENCV读取图片并显示
int main()
{
	// 设置日志级别为不输出任何日志信息(通过隐藏日志的方式,不打印此信息)
    utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);
    //读取图片地址并存放在src
	Mat src = imread("C:\\Users\\86173\\Desktop\\TI\\Q版阿离.png");
	if (src.empty())//用于判断图像有没有正常读取到
	{
		printf("coule not load image...\n");//如果src.empty()为空则打印无法加载图像
		return -1;//函数为int型需要一个返回值
	}
    //设置窗口的名字为test opencv setup
    //CV_WINDOW_AUTOSIZE 表示窗口的大小将自动调整以适应显示的图像的大小。
	namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);//不写也可以。
    //imshow函数中可以设置窗口名字,窗口设置为默认。

	imshow("test opencv setup", src);//显示图片

	//显示图片,必须要加waitKey(),否则无法显示图像
	//waitKey(0),无限地显示窗口,直到任何按键按下
	//如果是其他数字,如waitKey(5000)表示5000毫秒,然后关闭。
	waitKey(0);

	destroyAllWindows();//关闭所有窗口
	return 0;
}

 二、运行结果:

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值