cv::imread的flags
2015-06-05 15:59
351 查看
刚刚被imread折腾了一下下。经过大概是这样的:
我看的书是opencv 2 Computer Vision Application Programming Cookbook,刚开始看第二章。
看着命令和matlab基本一样,就打算些点小代码熟悉一下,处理对象就是我们公司自己采集的指纹图像,8位灰度图。于是按照自己的想法,有了如下代码:
理论上应该会在图像上请出一块100*100的白色正方形区域,可是结果却是一个长方形。前后检查了半天,感觉没有我想象中的“低级错误”后,我用imwrite把结果保存图像到本地,仔细看发现居然原来的灰度图中出现了绿色。丢进matlab一看变成了3channel的图了。因为上网不方便,我开始了乱七八糟的尝试,比如将读取图像的那一句改为了:
想着这样你应该是单通道了吧,发现依旧顽固的是三通道。这点让我很诧异,这么智能。
把设置255的代码
改为
后,自然就是正确的结果。不过我只是习惯于处理灰度图像,所以决定还是求助于网络,查看了下文档:
这才知道居然还有这样的选项。。。于是修改代码:
我看的书是opencv 2 Computer Vision Application Programming Cookbook,刚开始看第二章。
看着命令和matlab基本一样,就打算些点小代码熟悉一下,处理对象就是我们公司自己采集的指纹图像,8位灰度图。于是按照自己的想法,有了如下代码:
#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace std; using namespace cv; int main() { const char* filename = "F:\\1ORIGINAL_0000.bmp"; Mat srcImg = imread(filename,CV_LOAD_IMAGE_GRAYSCALE ); if (!srcImg.data) { cout << "No Image!!!" << endl; return 0; } cout << "Size is " << srcImg.size().height << ", " << srcImg.size().width << endl;
int i,j; for (i = 0; i < 100; i ++) { for (j = 0; j < 100; j ++) { srcImg.at<uchar>(i,j) = 255; } } namedWindow("My Image"); imshow("My Image", srcImg); waitKey(); return 1; }
理论上应该会在图像上请出一块100*100的白色正方形区域,可是结果却是一个长方形。前后检查了半天,感觉没有我想象中的“低级错误”后,我用imwrite把结果保存图像到本地,仔细看发现居然原来的灰度图中出现了绿色。丢进matlab一看变成了3channel的图了。因为上网不方便,我开始了乱七八糟的尝试,比如将读取图像的那一句改为了:
Mat srcImg(106,114,CV_8UC1); srcImg = imread(filename);
想着这样你应该是单通道了吧,发现依旧顽固的是三通道。这点让我很诧异,这么智能。
把设置255的代码
srcImg.at<uchar>(i,j) = 255;
改为
srcImg.at<Vec3b>(i,j)[0] = 255; srcImg.at<Vec3b>(i,j)[1] = 255; srcImg.at<Vec3b>(i,j)[2] = 255;
后,自然就是正确的结果。不过我只是习惯于处理灰度图像,所以决定还是求助于网络,查看了下文档:
这才知道居然还有这样的选项。。。于是修改代码:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
const char* filename = "F:\\1ORIGINAL_0000.bmp";
Mat srcImg = imread(filename,CV_LOAD_IMAGE_GRAYSCALE );
if (!srcImg.data)
{
cout << "No Image!!!" << endl;
return 0;
}
cout << "Size is " << srcImg.size().height << ", "
<< srcImg.size().width << ", " << srcImg.channels() << endl;
int i,j;
for (i = 0; i < 100; i ++)
{
for (j = 0; j < 100; j ++)
{
srcImg.at<uchar>(i,j) = 255;}
}
namedWindow("My Image");
imshow("My Image", srcImg);
waitKey();
return 1;
}
相关文章推荐
- SAT句子填空题的分析过程
- 实践出真知系列
- robotframework 是如何根据output收集失败的case的
- 二进制权限控制
- linux常用命令之login命令
- c++设计模式之外观模式
- iOS 线程库 promisekit
- Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2
- Android 网格视图GridView的使用
- Codeforces 107B Basketball Team 简单概率
- iOS archiveRootObject 归档失败问题
- 【Java23种设计模式学习笔记】一:策略模式
- C语言实现缓冲区溢出实例
- 寄存器
- 程序间协作方式-shell out
- android 快捷技巧
- ajax请求弹出窗口被浏览器拦截的问题
- 利用客户端解决方案改进跨域通信
- 从程序运行效率角度谈开发规范
- Codeforces Round #306 (Div. 2) A B C