官网:
从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值。
Mat A, C; // 只创建信息头部分
A = imread(argv[1], CV_LOAD_IMAGE_COLOR); // 这里为矩阵开辟内存
Mat B(A); // 使用拷贝构造函数
C = A; // 赋值运算符
所有Mat对象最终都指向同一个也是唯一一个数据矩阵。不同的对象只是访问相同数据的不同途径而已。
可以创建只引用部分数据的信息头。比如想要创建一个感兴趣区域( ROI)
Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle
Mat E = A(Range:all(), Range(1,3)); // using row and column boundaries
// Rect(int_x,int_y,int width,int height) //所选区域左上角的坐标值,以及矩形的宽高
Mat ImageROI=srcImage(Rect(10, 10, 100, 100));
Mat ImageROI2= srcImage(Range(50,50+90), Range(100,100+100)); //Range 是一段连续序列
imshow("ROI图",ImageROI);
imshow("ROI图",ImageROI2);
想要拷贝矩阵本身 ,使用函数 clone() 或者 copyTo() 来拷贝一幅图像的矩阵
Mat F = A.clone();
Mat G;
A.copyTo(G);
RGB颜色空间,它的基色是红色、绿色和蓝色,有时为了表示透明颜色也会加入第四个元素 alpha (A)。
图像保存至硬盘 (using imwrite)
/* simple API for reading/writing data */
(void) cvSave( const char* filename, const void* struct_ptr,
const char* name CV_DEFAULT(NULL),
const char* comment CV_DEFAULT(NULL),
CvAttrList attributes CV_DEFAULT(cvAttrList()));
(void*) cvLoad( const char* filename,
CvMemStorage* memstorage CV_DEFAULT(NULL),
const char* name CV_DEFAULT(NULL),
const char** real_name CV_DEFAULT(NULL) );
对于cvLoad 和 cvSave的应用实例,以后用上了在添加进来。。。
其实可以用C/C++中的fopen 操作来实现
确定你想看的那个数据变量,要先分配内存,用 文件指针 FILE*
fopen() 打开流
fclose() 关闭流
fprintf() 按格式输出到流
fscanf() 从流中按格式读取
字符串 含义
"r" 以只读方式打开文件
"w" 以只写方式打开文件
"a" 以追加方式打开文件
"r+" 以读/写方式打开文件,如无文件出错
"w+" 以读/写方式打开文件,如无文件生成新文件
例如
long long arr[300];
arr[i] = temp;
FILE *filePath;
filePath = fopen("D:\\test.txt", "w+");
for(int i = 0; i < 300 ; i++)
{
fprintf(filePath,"[ %d ] = %d \n", i, arr[i]);
}
fclose(filePath);
实现temp数据变量以txt保存。