opencv学习笔记3-opencv读取图片转化为灰度图并保存

 一、函数介绍:

(1)imwrite :

  imwrite 函数是 OpenCV 库中用于将图像保存到文件的函数。

(2)函数原型:               
  CV_EXPORTS_W bool imwrite(const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>());
(3)参数:
  • filename:要保存到的文件的名称。文件格式通常由文件扩展名决定(例如,.jpg 表示 JPEG 格式)。
  • img:要保存的图像或图像数组。可以是 cv::Mat 类型或 std::vector<cv::Mat> 类型的容器。
  • params(可选):特定格式的参数列表,以 (paramId_1, paramValue_1, paramId_2, paramValue_2, ...) 的形式编码。这些参数可以控制编码器的行为,例如质量、压缩等。如果未指定,将使用默认值。

二、示例代码 

#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;
//3-OPENCV读取图片显示并转化为灰度图显示
int main() //int main(int argc, char** argv)
{
	utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);// 设置日志级别为不输出任何日志信息(通过隐藏日志的方式,不打印此信息)
    Mat srcMat = imread("C:\\Users\\86173\\Desktop\\TI\\Q版阿离.png");//读入原始图片
	Mat gryMat = imread("C:\\Users\\86173\\Desktop\\TI\\Q版阿离.png", 0);//读入原始图片,加参数0,表示读入,并转换成灰度图
	
	cout << "empty:" << (srcMat.empty() ? "the Mat is empty,fail to read" : "not empty") << endl;
	if (srcMat.empty())return -1;
	
	imwrite("C:\\Users\\86173\\Desktop\\TI\\gray-butterfly.jpg", gryMat);//保存图片
	
	//namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);//不使用该函数则窗口为默认配置
	cout << "rows(列数):" << srcMat.rows << "    " << gryMat.rows << endl;//行数

	cout << "cols(行数):" << srcMat.cols << "    " << gryMat.cols << endl;//列数 

	cout << "dims(维度):" << srcMat.dims << "    " << gryMat.dims << endl;//维度,普通图片为2维

	// Size是OpenCV内部定义的数据类型
	cout << "size[](宽度*高度):" << srcMat.size().width << "*" << srcMat.size().height << "    " << gryMat.size().width << "*" << gryMat.size().height << endl;

	cout << "depth (深度ID):" << srcMat.depth() << "    " << gryMat.depth() << endl;
     // channel数,如灰度图为单通道,RGB图为3通道
	cout << "channels(通道):" << srcMat.channels() << "    " << gryMat.channels() << endl;
   
    //即elemSize==字节数x通道数;矩阵一个元素占用的字节数
	cout << "elemSize(一个元素占用的字节数):" << srcMat.elemSize() << "[byte]" << "    " << gryMat.elemSize() << "[byte]" << endl;
	// Mat中一个元素的一个通道的size(byte数),矩阵元素一个通道占用的字节数
	//eleSize1==elemSize/channels;
	cout << "elemSize1 (一个通道占用的字节数):" << srcMat.elemSize1() << "[byte]" << "    " << gryMat.elemSize1() << "[byte]" << endl;

    //元素的总数,如果是图像,即为像素个数
	cout << "total(像素个数):" << srcMat.total() << "    " << gryMat.total() << endl;

	//cols*elemSize=cols*eleSize1*channels ,每一行中所有元素的字节总量
	cout << "step(每一行中所有元素的字节总量):" << srcMat.step << "[byte]" << "    " << gryMat.step << "[byte]"  << endl;
   

     // 一个step的channel总数,每行的channel数
	cout << "step1 (每行的通道数):" << srcMat.step1() << "     " << gryMat.step1() << endl;
   
    // 该Mat在内存上是否连续
	cout << "isContinuous(该Mat在内存上是否连续):" << (srcMat.isContinuous() ? "true" : "false") << "    " << (gryMat.isContinuous() ? "true" : "false") << endl;

	cout << "isSubmatrix(是否为子矩阵):" << (srcMat.isSubmatrix() ? "true" : "false") << "    " << (gryMat.isSubmatrix() ? "true" : "false") << endl;// 是否为子矩阵

	imshow("src", srcMat); //显示原始图片
	imshow("gray", gryMat);//显示灰度图片

	waitKey(0);//显示图片,必须要加waitKey(),否则无法显示图像

	//关闭所有窗口
	destroyAllWindows();

	return 0;
}

三、运行结果 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值