一、摄像机与视频的读取
VideoCapture cap(0);//读取摄像头,建立一个名为cap的videocapture的结构
while (true)//循环为ture执行
{
Mat frame;//建立一个名为frame的Mat类
cap>>frame;//把cap输入到frame里
namedWindow("123",0);//建立一个名为123的窗口,自适应大小
imshow("123",frame);//在名为123的窗口上显示frame
waitKey(30);//等待30ms
}
二、读取图片与其中的像素值
Mat imggray=imread("123.jpg",1);//建立一个名为imggray的Mat类,读取123.jpg图片,载入三通道颜色
cvtColor(imggray,imggray,CV_RGB2GRAY);//用cvtColor函数将imggray转化为灰度图
cout<<(int)imggray.at(1,1)<
三、Mat对象一些操作
Mat imgone=Mat::ones(5,5,CV_64FC1);//定义一个5行5列的全部为1矩阵,cv_64fc1对应double类型
Mat sum=image*imgone;//定义个Mat类sum,值为image与imgone的乘积
cout<<sum<<endl;//输出sum
Mat image=Mat::eye(5,5,CV_64FC1);//定义一个5行5列的对角矩阵
image.inv();//image的逆矩阵
四、图像x方向求导的卷积与非卷积操作
VideoCapture cap(0);//读取摄像头
while (true)
{
Mat frame;
cap>>frame;
cvtColor(frame,frame,CV_RGB2GRAY);
/*cout<<"row"<(i,j-1)=frame.at(i,j-1)-frame.at(i,j+1);
}
}*/
//下面是求图像的卷积
Mat dimg=Mat(frame.rows,frame.cols-2,CV_8UC1);
Mat model=Mat(1,3,CV_64FC1);//model为一个一行三列的64位浮点型单通道矩阵
model.at(0,0)=1;//对model这个矩阵赋值
model.at(0,1)=0;
model.at(0,2)=-1;
for(int i=0;i(i+m,j+n))*model.at(m,n+half);//强制转换为double类型
}
}
dimg.at(i,j-1)=(uchar)sum;//将对应的值赋给dimg
}
}
imshow("123",dimg);//在123窗口上显示dimg
waitKey(10);//延迟等待10ms
}
五、高斯模糊的核创建与卷积操作
double sigma=50;//定义sigima的值
Mat gauss(5,5,CV_64FC1);//创建一个矩阵
for (int i=-2;i<3;i++)
{
for (int j=-2;j<3;j++)
{
gauss.at(i+2,j+2)=exp(-(i*i+j*j)/(2*sigma*sigma));
}
}
double gssum=sum(gauss).val[0];
for (int i=-2;i<3;i++)
{
for (int j=-2;j<3;j++)
{
gauss.at(i+2,j+2)/=gssum;
}
}
//cout<>frame;
cvtColor(frame,frame,CV_RGB2GRAY);//将图像转换为灰度图
Mat dimg=Mat(frame.rows-4,frame.cols-4,CV_8UC1);
for (int i=2;i(i+m-2,j+n-2))*gauss.at(m,n);//强制转换成double型uchar对应上面的CV_8UC1
}
}
dimg.at(i-2,j-2)=(uchar)sum;
}
}
imshow("a",frame);//在窗口a上显示frame
imshow("gauss",dimg);//在窗口gauss上显示dimg
waitKey(10);//等待10ms
六、相关API操作
VideoCapture cap(0);//调用摄像头
while (true)
{
Mat frame;
cap>>frame;
cvtColor(frame,frame,CV_RGB2GRAY);//转换成灰度图
//GaussianBlur(frame,frame,cvSize(5,5),10,10);直接调用高斯模糊函数(输入图像,目标图像,高斯内核的大小[由sigima计算而来],高斯核函数在x方向上的的标准偏差,在y方向上的标准偏差)
//Canny(frame,frame,100,100);调用Canny函数,算法做边缘检测(输入图像,目标图像,第一个阈值,第二个阈值)阈值用于控制边缘连接
//Sobel(frame,frame,0,1,1);调用Sobel函数
imshow("q",frame);//在窗口q上显示frame
waitKey(10);//等待10ms
}