1.Opencv图像读写与显示(C++)

1.Opencv图像读写与显示(C++),第1张

1.Opencv图像读写与显示(C++) 1.读取图像函数

Mat imread(const String& filename, int flags = IMREAD_COLOR)

此函数从指定文件加载图像,并作为 Mat 对象返回。如果函数无法读取文件,它将返回一个空的 Mat 对象。

  • filename- 必须提供图像文件的相对或绝对路径。如果您提供相对路径,则它应该相对于您的 cpp 文件。始终支持 jpeg、jpg、bmp、png、tiff 和 tif 图像文件类型。根据您的平台和安装的编解码器,支持其他图像文件类型。

  • flags - flag 参数有几个可能的值。使用默认的 IMREAD_COLOR 参数。

    • IMREAD_UNCHANGED - 图像将按原样加载。如果你想在你的输入图像中获得 alpha 通道(如果它可用),你必须使用这个标志。
    • IMREAD_GRAYSCALE - 图像将作为灰度图像加载(即 - 单通道图像,黑白图像)
    • IMREAD_COLOR - 图像将作为 BGR 图像加载(即 - 3 通道图像,彩色图像)
2.窗口函数

void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE)

此函数创建一个可用于放置图像和跟踪条的窗口。如果具有给定名称的窗口已存在,则此函数不执行任何 *** 作。

  • winname - 窗口的名称。该名称将显示在新创建窗口的标题栏中。此名称也是此窗口的标识符,它将在以后的 OpenCV 函数调用中用于标识该窗口。

  • flags - 确定窗口的大小。默认的 WINDOW_AUTOSIZE 参数。

    • WINDOW_AUTOSIZE - 用户无法调整窗口大小。图像将以其原始尺寸显示。
    • WINDOW_NORMAL- 用户可以调整窗口大小。
3.图像显示函数

void imshow(const String& winname, InputArray mat)

此函数在由 winname 指定的窗口中显示图像。如果窗口是用 WINDOW_AUTOSIZE 标志创建的,图像将以其原始大小显示。否则图像可能会缩放到窗口的大小。如果尚未通过调用 namedWindow() 函数创建窗口,该函数将创建一个带有 WINDOW_AUTOSIZE 标志的窗口。

此函数调用之后应该是 waitKey(int) 函数调用,以便提供足够的时间在指定的持续时间(以毫秒为单位)在窗口中绘制和显示图像。如果不调用waitKey(int) 函数,图像将不会显示在窗口中。

  • winname - 由 namedWindow() 函数创建的窗口的名称。
  • mat - 需要显示图像的 Mat 对象
4.颜色空间转换函数

void cvtColor(InputArray src, OutputArray dst, int code,int dstCn = 0)

颜色空间转换函数。

  • src - 输入图像:8 位无符号、16 位无符号 ( CV_16UC… ) 或单精度浮点。
  • dst - 输出与 src 大小和深度相同的图像。
  • code - 颜色空间转换代码(请参阅ColorConversionCodes)。
  • dstCn - 目标图像中的通道数;如果参数为 0,则通道数自动从 src 和 code 导出。
5.写入函数(保存)

bool cv::imwrite(const String& filename, InputArray img, const std::vector< int > & params = std::vector< int >())

将图像保存到指定文件。

  • filename- 必须提供图像文件的相对或绝对路径。如果您提供相对路径,则它应该相对于您的 cpp 文件。始终支持 jpeg、jpg、bmp、png、tiff 和 tif 图像文件类型。
  • img- 需要保存图像的 Mat 对象。
  • params-可选参数,一般情况下忽略即可。

示例1:

#include 
#include 

using namespace std;
using namespace cv;

int main() {

	Mat in_image, out_image;
	in_image = imread("C:\Users\67231\Desktop\NASA_LS.png", IMREAD_UNCHANGED);//IMREAD_UNCHANGED表示存储到内存的影像不会改变
	
	//判断影像是否读入
	if (in_image.empty()) {
		cout << "报错!影像未被读入..." << endl;
		return -1;
	}

	//创建两个窗口
	namedWindow("窗口1", 0);
	namedWindow("窗口2", 0);

	//在创建的窗口中显示图像
	imshow("窗口1", in_image);

	// 将BGR颜色转为灰度图像
	cvtColor(in_image, out_image, COLOR_BGR2GRAY);
	imshow("窗口2", out_image);

	// 在窗口中等待任何键被点击
	waitKey(0);

	//销毁窗口1、2
	destroyWindow("窗口1");
	destroyWindow("窗口1");
	imwrite("C:\Users231\Desktop\NASA_LS_gray.png", out_image);
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5097478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存