opencv图像读入与输出详解_cv::imread_grayscale_q511951451的博客-程序员秘密

技术标签: 计算机视觉  opencv计算机视觉  opencv  

opencv图像读入与输出详解

1. 输入参数分析

    /*
    接口函数:CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
    分析:
    输入参数: 1. filename: 输入图像文件名称,支持jpg,png等常用图像格式
               2. flags 数据转换表示,enum枚举类型,具有如下格式,数据存储在 cv::ImreadModes下
       IMREAD_UNCHANGED            = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
       IMREAD_GRAYSCALE            = 0,  //!< If set, always convert image to the single channel grayscale image.
       IMREAD_COLOR                = 1,  //!< If set, always convert image to the 3 channel BGR color image.
       IMREAD_ANYDEPTH             = 2,  //!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
       IMREAD_ANYCOLOR             = 4,  //!< If set, the image is read in any possible color format.
       IMREAD_LOAD_GDAL            = 8,  //!< If set, use the gdal driver for loading the image.
       IMREAD_REDUCED_GRAYSCALE_2  = 16, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.
       IMREAD_REDUCED_COLOR_2      = 17, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.
       IMREAD_REDUCED_GRAYSCALE_4  = 32, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.
       IMREAD_REDUCED_COLOR_4      = 33, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.
       IMREAD_REDUCED_GRAYSCALE_8  = 64, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.
       IMREAD_REDUCED_COLOR_8      = 65, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.
       IMREAD_IGNORE_ORIENTATION   = 128 //!< If set, do not rotate the image according to EXIF's orientation flag.
    */

    2. 显示一张图像


    // 接口函数: CV_EXPORTS_W void imshow(const String& winname, InputArray mat); 
    /*
        1. CV_EXPORTS_W 是宏定义 __declspec(dllexport), 用于修饰 DLL 导出数据、函数、类或类成员函数。
        以解决不同版本,不同编译器之间没有统一标准规范而导致编译出错的问题。opencv类库中,大量使用这种
        方式修饰 数据、函数、类或类成员函数。
        2. 参数分析: winname,是窗体名称,字符串类型
                    InputArray, 通用数据输入,通过构造的方式支持多种数据格式输入,主要包含 cv::Mat,cuda::GpuMat,std::vector
                    ogl::Buffer 及其模板形式等多种输入。
    */
    

 

3. 保存图像


    /*
    接口函数:CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());

    参数分析:
        输入参数:1.filename,文件名,字符串类型;
                2. img, 通用输入类型 InputArray;
                3. params, 自定义数据存储,使用默认即可;
        返回参数:Bool类型,如果保存成功,则返回真值

    */

 

代码实现:

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


//using namespace cv;

int main(int argc, char** argv) {

    
    cv::String imgPath = "F:/软件开发/qt开发/08opencv/opencv素材/Image/";
    //cv::String fileName = "Luffy.png";
    cv::String fileName = "opencvlog.jpg";
    cv::String pathFile = imgPath + fileName;
    cv::Mat  src;

 

    // 1. 读入空图像, 
    src = cv::imread("");
    if (src.data == NULL) {  // 没有读入数据时,返回空。 src.data 为uchar* 指针,用来只想数据的其实位置
        printf("图像读入失败,sizeof(src.data) = %d,\n",sizeof(src.data));
    }

    // 2.以默认值读入一张图像
    src = cv::imread(pathFile);  // 采用默认方式读取图像
    if (src.data == NULL) {
        printf("图像赌徒失败\n");
        return -1;
    }
    cv::imshow("1. 默认读图", src); // 显示一张图像
    // 3.图像转换成灰度图像读图
    src = cv::imread(pathFile, cv::IMREAD_GRAYSCALE);  // 采用默认方式读取图像
    cv::imshow("2. 转换成灰度读图", src); // 显示一张图像
    // 4.图像放大两倍
    src = cv::imread(pathFile, cv::IMREAD_REDUCED_GRAYSCALE_2);  // 采用默认方式读取图像
    cv::imshow("3. 图像缩小两倍,并灰度化", src); // 显示一张图像
    // 5.图像缩小两倍
    src = cv::imread(pathFile, cv::IMREAD_REDUCED_COLOR_2);  // 采用默认方式读取图像
    cv::imshow("4. 图像缩小两倍", src); // 显示一张图像


    // 6. 显示一张图像
    // 接口函数: CV_EXPORTS_W void imshow(const String& winname, InputArray mat); 
    /*
        1. CV_EXPORTS_W 是宏定义 __declspec(dllexport), 用于修饰 DLL 导出数据、函数、类或类成员函数。
        以解决不同版本,不同编译器之间没有统一标准规范而导致编译出错的问题。opencv类库中,大量使用这种
        方式修饰 数据、函数、类或类成员函数。
        2. 参数分析: winname,是窗体名称,字符串类型
                    InputArray, 通用数据输入,通过构造的方式支持多种数据格式输入,主要包含 cv::Mat,cuda::GpuMat,std::vector
                    ogl::Buffer 及其模板形式等多种输入。
    */
    
    // 7。保存图像
    /*
    接口函数:CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());
    参数分析:
        输入参数:1.filename,文件名,字符串类型;
                2. img, 通用输入类型 InputArray;
                3. params, 自定义数据存储,使用默认即可;
        返回参数:Bool类型,如果保存成功,则返回真值

    */
    bool saveFlag = cv::imwrite("E:/saveImg.jpg", src);
    printf("saveFlag=%d\n",saveFlag);

    cv::waitKey(0);  // 等待按键,输入为整形,单位为ms,返回为按键ACII码

    //system("pause");
    return 0;
}
 

 

输出结果:

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/q511951451/article/details/107436426

智能推荐

【无标题】有功功率和无功功率直观理解_有功功率等于零_电气系电气狗的博客-程序员秘密

有功功率和无功功率直观理解交流输电线路的视在功率此为均匀传输线链形电路模型,为辅助理解交流电能量交互。可以理解电压为势能,是每个电荷的能量(这里采用正电荷为流动的电荷粒子方便理解)。电压为峰值时,势能达到最大;电压为负峰值时,势能最小;电压为0时,势能平衡。在线路上的某一点,同时有电压和电流两个物理量存在,其中电压只存在相对于电容另一端的正负分别;电流沿线路方向做往复的正弦运动。**电流电压相位一致时:**当线路电压从负峰值上升(如图虚线间的一个周期),在线路某一点P(设定P为电荷往复运动的负峰

UITableView和UITableViewCell的关系_long__rain的博客-程序员秘密

UITableViewCell是UITableView的子类,只是比较特殊的UITableView。

Linux内核中kfifo使用_码农gogo的博客-程序员秘密

/* * Sample kfifo byte stream implementation * * Copyright (C) 2010 Stefani Seibold <[email protected]> * * Released under the GPL version 2 only. * */#include <linux/init.h>#include <linux/m

Java开发者不会这些永远都只能是三流程序员,细数一下你是不是?_weixin_33997389的博客-程序员秘密

源码系列手写spring mvc框架基于Spring JDBC手写ORM框架实现自己的MyBatisSpring AOP实战之源码分析Spring IOC高级特性应用分析ORM框架底层实现原理剖析手写Spring MVC框架实现手把手分析Mybatis源码实现高手进阶之手写Mybatis框架高可用/分布式/高性能实践一个高并发转盘抽奖构建无切入性业务系统监控平台Netty...

线程池ThreadPoolExecutor创建_hoooly的博客-程序员秘密

private static final Logger LOGGER = LoggerFactory.getLogger(FileListenerController.class);/** * 线程池的7个参数 * 1、corePoolSize线程池的核心线程数 * 2、maximumPoolSize能容纳的最大线程数 * 3、keepAliveTime空闲线程存活时间 * 4、unit 存活的时间单位 * 5、workQueue 存放提交但未执行任务的队列 * 6、threadFac.

随便推点

「代码随想录」70. 爬楼梯【动态规划】详解!_代码随想录的博客-程序员秘密

> 爬楼梯和斐波那契很像,但相比昨天的题目可就有难度了,来看看难到哪里了!

Android JNI 异常定位(1)—— addr2line 命令使用记录_android addr2line_Else_Q的博客-程序员秘密

Android native报错有时候只有一句 signal 11 (SIGSEGV),这种情况仅通过log是很难定位到问题的。不过Android 在/data/tombstones目录保存了错误的堆栈信息,为定位bug提供了路径。不过一般这里的log都无法像java一样直接定位的出错的行数。如下图:先看崩溃的tid:3596,不是主线程,说明是子线程。backtrace需要借助Android ndk提供的addr2line工具来分析,从工具的名字就能看出来,这个东西可以帮我们把报错的地址指向代码.

如何用Python将普通视频变成动漫视频_python实现视频转动画_轻松学Python的博客-程序员秘密

最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫。所以今天的目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。...

【详细】手把手教你实现JavaScript轮播图功能_epic轮播图csdn_HL是限量版的博客-程序员秘密

轮播图见下图是移动端,网站上一种非常常见的展示效果,我们在各大app,网站都经常可以看到这种效果。用户可以用手来回选择展示的图片,无点击事件时,控件会依次循环展示图片。那么本文今天就探究一下如何实现这类效果。...

Java基础(三)_weixin_30508309的博客-程序员秘密

这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助!由于代码是分模块的上传非常的不便。也比较多,讲的也是比较清晰的!如果你有需要可以在评论中留下您的邮箱我看到一定会免费发给你的!感谢这个平台让我们大家共同进步吧!! 记住 程序员是无私的!!!也非常欢迎到我的博客内观看 博客地址:http://ww...

推荐文章

热门文章

相关标签