获取一张图片大概三种方式
1.Mat Srciag = imread("D:\test.jpg");//直接读取硬盘的文件
2.VideoCapture cap(0);//从视频或者摄像头读取一帧图片
3.Mat Srcimg(Size(5,5),CV_8UC3,Scalar(100,50,20));//MAT构造函数创建一个
Mat属性
Mat Srciag = imread("D:\\test.jpg");
cout << Srciag.cols << endl;//列
cout << Srciag.rows << endl;//行
cout << Srciag.size() << endl;//尺寸
cout << Srciag.type() << endl;//类型
cout << Srciag.channels() << endl;//通道
cout << Srciag<< endl;//显示图片所有的像素点
Srcimg.at<uchar>(1, 2) = 30;//修改某个像素点的值
Srcimg.at<Vec3b>(1, 2) = Vec3b(88,77,66);//修改三通道像素点的值
Srcimg.at<Vec3b>(1, 2)[1] = 99;//修改三通道某一具体值
resize(Srcimg, Srcimg, Size(6, 6));//图像尺寸修改为6乘6
resize(Srcimg, Srcimg, Srcimg.size()*2);//图像放大为2倍
resize(srcImage, srcImage, Size(srcImage.cols / 4, srcImage.rows / 4)); //缩小
Srcimg = Srcimg * 2;//每个像素点都乘以2
imshow("原图",Srciag);//展示原图
imshow("原图",Srciag.t());//旋转图片再展示
修改某个像素点的值
修改三通道像素点的值
修改三通道某一具体值
Mat和IpIImage
1.Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分
2.IplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题
Mat构造函数
Mat M(2,2,CV_8UC3, Scalar(0,0,255))
其中前两个参数分别表示行(row)跟列(column)、
第三个CV_8UC3中的8表示每个通道占8位、
U表示无符号、C表示Char类型、3表示通道数目是3,
第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数目一致
网友评论