(1)读写图像:
imread可以指定加载为灰度或rgb图像
imwrite保存图像文件,类型由扩展名决定
(2)读写像素
a、读一个GRAY像素点的像素值(cv_8UC1)
Scalar intensity =img.at<uchar>(y,x);或者Scalar intensity =img.at<uchar>(Point(x,y));
b、读一个RGB像素点的像素值
Vec3f intensity =img.at<Vec3f>(y,x);
float blue =intensity.val[0];
float green =intensity.val[1];
float red=intensity.val[2];
(1)灰度图像
Img.at<uchar>(y,x)=128
(2)RGB三通道图像
Img.at<Vec3b>(y,x)[0]=128;//blue
Img.at<Vec3b>(y,x)[1]=128;//green
Img.at<Vec3b>(y,x)[2]=128;//red
(3)空白图像赋值
Img=scalar(0);
(4)ROI选择
Rect r(10,10,100,100);
Mat smallimg=img(r);
(5)Vec3b与Vec3f
Vec3b对应三通道的顺序是blue/green/red的uchar类型数据
Vec3f对应三通道的float类型数据
把CV_8UC1转换到cv32f1实现:src.converTo(dst,CV_32F)
(1)理论-线性混合操作
G(x)=(1-a)f0(x)+af1(x) 其中的a的取值范围为0-1之间
相关API(addweighted)
Void cv::addweighted(inputArray src1, 参数1:输入图像Mat-src1
Double alpha, 参数2:输入图像src1的alpha值
inputArry src2, 参数3:输入图像Mat-src2
double beta, 参数4:输入图像src的alpha值
double gamma, 参数5:gamma值
OutputArray dst, 参数6:输出混合图像
Int dtype=-1)
注意点:俩张图像的大小和类型必须一致才可以
(2)调整图像亮度与对比度
理论:图像变换可以看做如下:
像素变换————点操作
邻域操作————区域
调整图像亮度和对比度属于像素变换————点操作
公式:G(i,j)=af(I,j)+b其中a>0,b是增益变量
重要的API:
Mat new_image=Mat::zeros(image.size(),image.typr());创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0
Saturate_cast<uchar>(value)确保值大小范围为0~255之间
Mat.at<Vec3b>(y,x)[index]=value 给每个像素点每个通道赋值
(1)使用cv::Point与cv::Scalar
Point表示2D平面上一个点x,y
Point p; p.x=10; p.y=8;
P=Pont(10,8);
Scalar表示四个元素的向量
Scalar(a,b,c); //a=blue,b=green,c=red表示RGB三个通道
(2)绘制线、矩形、圆、椭圆等基本几何形状
画线cv::line(line_4\line_8\line_AA)
画椭圆cv::ellipse
画矩形cv::rectangle
画圆cv::circle
画填充cv::fillPoly
(3)随机生成与绘制文本
Cv::putText()
生成高斯随机数gaussian(double sigma)
生成正态分布随机数uniform(int a,int b)