读入数字图像到数组,用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. ZOJ Problem Set - 1002(DFS)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002 题意:给出一个n,有n*n大小的城市,(.)表示空地,从碉堡(O)射 ...

  2. uva 10892

    试了一下纯暴力  结果过了 无话可说  应该有更好的方法...... /**************************************************************** ...

  3. mac忘记密码的解决办法

    开机, 启动时按"cmd+S".这时,你会进入Single User Model,出现像DOS一样的提示符 #root>.请在#root>下 输入 (注意空格, 大小写 ...

  4. log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a "org.apache.lo .

    log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a &quo ...

  5. movzbl和movsbl

    汇编语言中最最常用的指令 -- 数据传送指令,也是我们接触的第一种类别的汇编指令.其指令的格式为:“mov 源操作数, 目的操作数”.mov系列支持从最小一个字节到最大双字的访问与传送.其中movb用 ...

  6. 解决git Push时请求username和password,而不是ssh-key验证

    转载自:https://blog.lowstz.org/posts/2011/11/23/why-git-push-require-username-password-github/ 之前开始用git ...

  7. ~/.ctag的作用与配置

    里边可以有基本配置和语言正则表达式解析的参数 # Basic options --recurse=yes --tag-relative=yes --exclude=.git # Regex for C ...

  8. How to download a website for offline usage

    wget -U Mozilla --recursive --no-clobber --page-requisites --html-extension --convert-links -- restr ...

  9. android系统平台显示驱动开发简要:LCD基本原理篇『一』

    平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客 ...

  10. C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统

    itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器.使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查阅一下 ...