读入数字图像到数组,用CNN进行训练,发现关于图像读取的一个问题。

问题描述:读取灰度数字图像,在验证时发现存在错误,从图像到数组中的值不完全一样?

main code as follows:

        int dst_width = 12, dst_height = 17;//set the dst size
int vec_Num = dst_width*dst_height;
/*the second parameter must set when read gray image,
//the default value=1 which return a 3-channel color image*/
Mat imgSrc = imread(img_path);
if (imgSrc.empty())
{
cout << "read " << img_path.c_str() << " failed!" << endl;
} Size dstSize = Size(dst_width, dst_height);
Mat imgDst = Mat(dstSize, CV_8UC1);
resize(imgSrc, imgDst, dstSize); vector<float> arr(vec_Num);
        int dst_width = 12, dst_height = 17;//set the dst size
int vec_Num = dst_width*dst_height;
/*the second parameter must set when read gray image,
//the default value=1 which return a 3-channel color image*/
Mat imgSrc = imread(img_path, 0);
if (imgSrc.empty())
{
cout << "read " << img_path.c_str() << " failed!" << endl;
} Size dstSize = Size(dst_width, dst_height);
Mat imgDst = Mat(dstSize, CV_8UC1);
resize(imgSrc, imgDst, dstSize); vector<float> arr(vec_Num);
///method 2 memcpy the image data to uchar arr in rows
unsigned char *imgData = new unsigned char[vec_Num];
memcpy(imgData, imgDst.data, imgDst.rows*imgDst.cols*sizeof(unsigned char));
for (int i = 0;i < vec_Num;i++)
{
arr[i] = (float)(imgData[i])/255;
} //test to print
for (int q = 0;q < imgDst.rows;q++)
{
for (int k = 0;k < imgDst.cols;k++)
{
int pos = q*imgDst.cols + k;
cout << setw(3) << (int)arr[pos] << " ";
}
cout << endl;
}
cout << endl; delete[] imgData;
imgSrc.release();
imgDst.release();

the result1 as follows:

                

左图为读入到数组以后,print出来的                                                                                  右图为原始图像

差异很明显,同时,错误也很明显。

现在修改代码:

Mat imgSrc = imread(img_path,0);

the result2 as follows:

           

左图为修改代码后读入到数组,print出来的                                                                                      右图为原始图像

conclusion:很明显得到的结果是不同的,所以,通过是这次使用imread()函数,告诉我们要注意一些缺省的默认参数是否与自己当前所解决的问题一致。

Appendix:

The OpenCV API reference introduce as follows:

C++: Mat imread(const string& filename, int flags=1 )
Parameters:
filename – Name of file to be loaded.
flags –
        Flags specifying the color type of a loaded image:
                 CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
                 CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
                 CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
        >0 Return a 3-channel color image.
                Note In the current implementation the alpha channel, if any, is stripped from the output image. Use negative value if you need the alpha channel.
       =0 Return a grayscale image.
       <0 Return the loaded image as is (with alpha channel).

关于图像读取函数imread()的一点使用经验,注意默认参数的赋值的更多相关文章

  1. 在定义C++, C通用接口函数时让C++接口支持默认参数

    在SOUI4的开发中,所有SOUI核心对象都采用了一种类似COM接口的技术来导出接口. 这所以采用这种方案,主要目的是为了让SOUI4支持C语言调用,扩展SOUI的使用场景. 众所周知,C++函数的参 ...

  2. 图像读取函数cv::imread()的几种使用方式

    string imgpath = "C:\Users\Y\Pictures\miao.jpg"; OpenCV的imread()函数不支持单右斜线形式的路径,即不支持上述形式的路径 ...

  3. 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...

  4. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  5. C/C++ Python的函数默认参数

    发现C/C++  Python的函数可以使用默认参数,来减少传参时候的参数个数. 但是:这样的默认参数最好是不变对象! #include <stdio.h> #include <st ...

  6. Day5 - 03 函数的参数-位置参数和默认参数

    位置参数    调用函数时,传入函数的参数,按照位置顺序依次赋值给函数的参数.#计算乘方的函数                def power(x, n):            s = 1     ...

  7. 我的c++学习(6)默认参数和内联函数

    默认参数 一般情况下,函数调用时实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有默认参数的函数,这种函数调用时实参个数可以与形参不相同.“默认参数”指在定义或声明函数时为形参指定默认 ...

  8. 3.C++内联函数,默认参数,占位参数

    本章主要内容: 1)内联函数(替代宏代码段) 2)默认参数 3)占位参数 1.C++的内联函数分析 1.1讲解内联函数之前,首先回忆下之前讲的define宏定义: 之前讲过宏定义会经过预处理器进行文本 ...

  9. 经典面试题-python函数之默认参数

    1.可变的默认参数----list  示例: def add(a, mylist=[]): # print(id(mylist)) mylist.append(a) return mylist pri ...

随机推荐

  1. C++ 嵌套类使用(二)

    C++嵌套类 1.   嵌套类的名字只在外围类可见. 2.   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员.嵌套类可以访问外围类的成员(通过对象.指针或者引用). 3 ...

  2. CyanogenMod刷机以及Google Play应用商店安装方法介绍

    http://blog.csdn.net/zcynical/article/details/19241595 写在前面: 本文介绍的方法除第一步外,适用于所有CM系统支持的设备,第一步由于用到了PC上 ...

  3. [itint5]两有序数组的交和并

    这一题也简单,唯一有意思的地方是提炼了一个函数用来做数组索引去重前进. int forward(vector<int> &arr, int i) { while (i+1 < ...

  4. AAC ADTS AAC LATM 格式分析

    http://blog.csdn.net/tx3344/article/details/7414543# 目录(?)[-] ADTS是个啥 ADTS内容及结构 将AAC打包成ADTS格式 1.ADTS ...

  5. redis的key过期时间

    public void set(String key,String value,int liveTime){ this.set(key, value); this.getJedis().expire( ...

  6. Android:反编译查看源码

    下载>>>>>>>>>>>>>>> 使用图形化反编译工具:Androidfby 打开Androidfby中的A ...

  7. Eclipse如何导出可执行jar包

    在编写shell脚本时用到了可执行的jar包,而jar包从Eclipse中导出时需要同时导出jar文件以及库文件夹,具体导出方式如下: (1)点击主方法所在的java,运行java applicati ...

  8. SQL盲注修订建议

    一般有多种减轻威胁的技巧: [1] 策略:库或框架 使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造. [2] 策略:参数化 如果可用,使用自动实施数据和代码之间的分离的结构化机 ...

  9. 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...

  10. 新LNMP环境,但是SESSION跨页面或者刷新 session丢失

    唠叨:本地WAMP做了一个微信项目,一切OK,昨天需要在LINUX架设一套LNMP环境.但是,在架设代码的时候,登录总是不成功~~~ 最终解决:权限 其实,作为一个程序猿,只要涉及到服务器内容,都应该 ...