opencv处理的基本对象为Mat矩阵,先写一个实例为学习Mat的基本操作:
/*函数功能:创建Mat对象,并制定相应的值
创建一个小的Mat矩阵
向量多个数组合成1起就是一个向量如3个数
*/
#include<opencv2\opencv.hpp>
#include<iostream>
#include<stdio.h>
using namespace std;
using namespace cv;
int main()
{
Mat src; //输入图像
src = imread("G:/users/cdm/documents/visual studio 2015/imageprocess/lena.jpg");
if (src.empty()) {
printf("不能加载图像\n");
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src); //第一个参数为显示窗口的名称,可以省略
//创建一个mat对象操作
Mat dst;
//对Mat对象进行操作 (创建一个和输入图像大小一样类型一致像素值为(0,0,255)的mat矩阵)
/*dst = Mat(src.size(), src.type());
dst = Scalar(0, 0, 255);
namedWindow("output image", CV_WINDOW_AUTOSIZE);
imshow("output image", dst);*/
//完全复制一个矩阵
//dst = src.clone();
//src.copyTo(dst);
//转化为灰度图像
cvtColor(src, dst, CV_BGR2GRAY);
printf("src channels:%d\n", src.channels());
printf("dst channels:%d\n", dst.channels());
const uchar *fisrtrow = dst.ptr<uchar>(0); //第一行的指针
printf("图像dst第一行的第一个像素值为%d\n", *fisrtrow);
//int row = dst.rows; //<=> int row = dst.row;
int row = dst.rows;
int col = dst.cols;
printf("row : %d col: %d\n", row, col);
namedWindow("output image", CV_WINDOW_AUTOSIZE);
imshow("output image", dst);
//创建一个8*8的8位3通道像素值为(0,255,0)的Mat矩阵
Mat m = Mat(8,8, CV_8UC3, Scalar(0, 255, 0));
cout << "m=" << endl << m <<endl;
Mat c;
c.create(4, 3, CV_8UC2); //create就三个参数
c = Scalar(127, 126);//scalar 的数必须与通道数一样
cout << "c=" << endl << c << endl;
//创建一个小数组或者小矩阵核
Mat b = (Mat_<float>(3, 3) << 0, -1, 0, 1, 5, 1, 0, 1, 0); //是双()
cout << "b=" << endl << b << endl;
namedWindow("m image", CV_WINDOW_AUTOSIZE);
imshow("m image", m);
waitKey(0);
return 0;
}