图像操作
主要内容
- 读写图像
- 读写像素
- 修改像素值
读写图像
imread 可以指定加载为灰度或者RGB图像
Imwrite 保存图像文件,类型由扩展名决定
imread函数的功能是加载一张图像,并将其存储至一个Mat类型的对象中。第一个参数为图像文件名称,可以是相对路径,也可以是绝对路径。
第二个参数就是加载图像时,读入的类型。
imwrite()函数的功能是将图像保存到指定的路径下。参数有两个。第一个是存储路径,第二个是待存储的Mat对象。这个函数比较简单没什么好解释的。
读写像素
读一个GRAY像素点的像素值(CV_8UC1)
Scalar intensity = img.at<uchar>(y, x);
或者下面这个写法
Scalar intensity = img.at<uchar>(Point(x, y));
读一个RGB像素点的像素值
Vec3f intensity = img.at<Vec3f>(y, x); float blue = intensity.val[0]; float green = intensity.val[1]; float red = intensity.val[2];
Vec3f是一个可以装取三个数的类型容器,存储一个点的像素值,按照bgr的顺序存放。
修改像素值
灰度图像
将x,y这个位置的像素点的值修改为128
img.at<uchar>(y, x) = 128;
RGB三通道图像
将x,y这个位置的像素点的值的修改为128,128,128。这个顺序是BGR顺序。
img.at<Vec3b>(y,x)[0]=128; // blue img.at<Vec3b>(y,x)[1]=128; // green img.at<Vec3b>(y,x)[2]=128; // red
空白图像赋值
空白图。。。。。这个怎么解释
img = Scalar(0);
ROI选择
ROI选择的参数很简单,就是左上角的坐标(前两个参数),后面的两个就是你想提取的ROI的宽和高是多少就写多少。
Rect r(10, 10, 100, 100); Mat smallImg = img(r);
Vec3B和Vec3F
Vec3b对应三通道的顺序是blue、green、red的uchar类型数据。
Vec3f对应三通道的float类型数据
把CV_8UC1转换到CV32F1实现如下:
src.convertTo(dst, CV_32F);