OpenCV图像基础学习

it2025-04-06  18

图像操作

(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];

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)

 

 

3.图像混合

(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 给每个像素点每个通道赋值

4.绘制形状与文字

(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)

最新回复(0)