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;
}