OpenCV 二

1.混合图像

混合图像需要两张图像同样像素

gamma=0.0;

addWeighted(src1,alpha,src2,(1-alpha),0.0,dst);//alpha是图像一所占的权重

2.对比度和亮度

对比度通过参数alpha,使周围像素差别变大,亮度调节使用belt,也就是变白

for(int row=0;row<height;row++)
    {
        for(int col=0;col<weight;col++)
        {
            if(src.channels()==3)//RGB三通道
            {
                int b=src.at<Vec3b>(row,col)[0];
                int g=src.at<Vec3b>(row,col)[1];
                int r=src.at<Vec3b>(row,col)[2];


                src.at<Vec3b>(row,col)[0]=saturate_cast<uchar>(b*alpha+belt);//调整对比度和亮度
                src.at<Vec3b>(row,col)[1]=saturate_cast<uchar>(g*alpha+belt);
                src.at<Vec3b>(row,col)[2]=saturate_cast<uchar>(r*alpha+belt);

            }else if(src.channels()==1)//灰白图像
            {
                int gray=src.at<uchar>(row,col);
                src.at<uchar>(row,col)=saturate_cast<uchar>(gray*alpha+belt);
            }
        }

    }

3.画图

:画直线

void draw_line(Mat src)//画线
{
    Point p1=Point(20,30);
    Point p2;
    p2.x=60;
    p2.y=90;
    Scalar color=Scalar(0,255,0);
    line(src,p1,p2,color,2,LINE_AA);//反锯齿
}

:画椭圆

void draw_ellipse(Mat src)//画椭圆
{
    Scalar color=Scalar(240,108,247);
    ellipse(src,Point(src.cols/2,src.rows/2),Size(src.cols/4,src.rows/8),0,0,360,color,2,LINE_8);
}

:画圆

void draw_circle(Mat src)//画圆
{
    Scalar color=Scalar(240,85,94);
    circle(src,Point(src.cols/2,src.rows/2),150,color,2,8);
}

:画矩形

void draw_rect(Mat src)//画矩形
{
    Rect start=Rect(90,90,300,300);
    Scalar color=Scalar(75,252,246);
    rectangle(src,start,color,3,LINE_8);
}

:随机画

void ran_line(Mat src)//随机画线
{
    int temp;
    RNG rng(1024);
    Point p1;
    Point p2;
    for(int i=0;i<256;i++)
    {
        p1.x=rng.uniform(0,src.cols);
        p1.y=rng.uniform(0,src.rows);
        p2.x=rng.uniform(0,src.cols);
        p2.y=rng.uniform(0,src.rows);
        if(waitKey(250)>0)break;

        temp=waitKey(50);
        cout<<temp<<endl;
        line(src,p1,p2,Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),1,8);
        //imshow("make",src);//拖延时间,很有美感!!
    }

}

:写字

putText(make,"My OpenCV!",Point(dst.cols/2-100,dst.rows/2),CV_FONT_BLACK,1.5,Scalar(87,240,95),2,8);

:画多边形填充

void my_poly(Mat src)//填充多边形
{
    Scalar color=Scalar(92,240,184);
    Point temp[1][6];
    temp[0][0]=Point(100,150);
    temp[0][1]=Point(150,80);
    temp[0][2]=Point(250,80);
    temp[0][3]=Point(300,150);
    temp[0][4]=Point(250,220);
    temp[0][5]=Point(150,220);
    const Point *(pts[])={temp[0]};
    int npt[]={6};

    fillPoly(src,pts,npt,1,color,LINE_8);
}

亮度,对比度与画图的叠加:

自动画线和写字

3.模糊

:均值模糊

卷积取平均值

:高斯模糊

分权重,更常用

#include <opencv.hpp>
using namespace cv;
int main()
{
    Mat src=imread("E:\\opencv\\cv_1\\luff.jpg");
    Mat dst1,dst2;
    namedWindow("original",WINDOW_AUTOSIZE);
    namedWindow("blur_out",WINDOW_AUTOSIZE);
    namedWindow("blur_gauss",WINDOW_AUTOSIZE);
    blur(src,dst1,Size(3,9),Point(-1,-1));
    GaussianBlur(src,dst2,Size(3,9),11,11);
    imshow("original",src);
    imshow("blur_out",dst1);
    imshow("blur_gauss",dst2);

    waitKey(0);
    return 0;

}

猜你喜欢

转载自blog.csdn.net/shuiyihang0981/article/details/82874454
今日推荐